Grid Grouping
The Grid component offers support for grouping.
Basics
To enable grouping, set the grid's
Groupable property to
true.
Drag a column header to the group panel and the grid will create groups in the data rows based on the available values for that field. An indicator will be shown for the column that is used for grouping. The group header shows the value for the field by which it is grouping.
You can also group by multiple fields and groups for subsequent fields will be nested within their parent groups. When adding a group, you can drag it in the desired position in the list of current groups.
To remove a group setting, click the
[x] button on its indicator in the group panel.
To prevent grouping by a field, set
Groupable="false" on its column. This can be useful for fields with unique values like IDs or names.
You can also use aggregates for the grouped data.
Enable grouping in Telerik Grid
Drag the column header of the "Team" and/or "On Vacation" column to the group panel at the top <TelerikGrid Data=@GridData <GridColumns> <GridColumn Field=@nameof(Employee.Name) <GridColumn Field=@nameof(Employee.Team) <GridColumn Field=@nameof(Employee.IsOnLeave) </GridColumns> </TelerikGrid> @code { public List<Employee> GridData { get; set; } protected override void OnInitialized() { GridData = new List<Employee>(); var rand = new Random(); for (int i = 0; i < 15; i++) { GridData.Add(new Employee() { EmployeeId = i, Name = "Employee " + i.ToString(), Team = "Team " + i % 3, IsOnLeave = i % 2 == 0 }); } } public class Employee { public int EmployeeId { get; set; } public string Name { get; set; } public string Team { get; set; } public bool IsOnLeave { get; set; } } }
How grouping works in the Telerik grid
Aggregates
The grid lets you define and use aggregates that it can calculate for you. You can read more about using them in the Aggregates article.
Load On Demand
The grid can load the grouped data on demand only. This can be useful if you have many groups and you want the user to first scroll through them without having to load all their data at once. Instead, the child items for a group can be loaded only when the user expands the group. This mode can also be used with Virtual Scrolling. You can read more about this feature in the Grid - Load Group Data On Demand article.
Group From Code
You can set the grid grouping from your code through the grid state. You can define the list of fields by which the grid is grouped and indexes of groups that will be collapsed (all groups are expanded by default).
If you want to set an initial state to the grid, use a similar snippet, but in the
OnStateInit event
Set grouping programmatically
@using Telerik.DataSource; <TelerikButton Primary="true" OnClick="@SetGridGroup">set grouping from code</TelerikButton> <TelerikGrid Data="@MyData" Height="400px" @ <GridColumns> <GridColumn Field="@(nameof(SampleData.Id))" Width="120px" /> <GridColumn Field="@(nameof(SampleData.Name))" Title="Employee Name" /> <GridColumn Field="@(nameof(SampleData.Team))" Title="Team" /> <GridColumn Field="@nameof(SampleData.IsOnLeave)" Title="On Vacation" /> <GridColumn Field="@(nameof(SampleData.HireDate))" Title="Hire Date" /> </GridColumns> </TelerikGrid> @code { public TelerikGrid<SampleData> Grid { get; set; } async Task SetGridGroup() { GridState<SampleData> desiredState = new GridState<SampleData>() { GroupDescriptors = new List<GroupDescriptor>() { new GroupDescriptor() { Member = "Team", MemberType = typeof(string) }, new GroupDescriptor() { Member = "IsOnLeave", MemberType = typeof(bool), SortDirection = ListSortDirection.Descending // not required, but a feature not yet available through the UI } }, // choose indexes of groups to be collapsed (they are all expanded by default) CollapsedGroups = new List<int>() { 0 }, }; await Grid.SetState(desiredState); } public IEnumerable<SampleData> MyData = Enumerable.Range(1, 30).Select(x => new SampleData { Id = x, Name = "name " + x, Team = "team " + x % 5, IsOnLeave = x % 2 == 0, HireDate = DateTime.Now.AddDays(-x).Date }); public class SampleData { public int Id { get; set; } public string Name { get; set; } public string Team { get; set; } public bool IsOnLeave { get; set; } public DateTime HireDate { get; set; } } }
More Examples
The following articles and sample projects can be helpful when implementing grouping:
Capture Group event - the grid state lets you know when it changes so you can capture different aspects of the change
Server Grouping - this article explains how to implement manual data source operations so you can offload the work to the server. It provides the overview of how to setup the grid for that, and examples - several with local data and links a repository with examples using REST API endpoints.
Static group that is always present