Edit this page

Programmatic Grouping

Besides the built-in grouping functionality you are able to use a programmatic approach to group the data in RadGridView. This is achieved via the GroupDescriptors collection. This collection of IGroupDescriptor objects allows you to use descriptors (GroupDescriptor or ColumnGroupDescriptor) to define grouping criteria and group's sorting direction for the bound data.

In GroupDescriptors collection you are able not only to add, but to remove or clear the entries in it too.

GroupDescriptor

When you add a new descriptor to the collection, the data is automatically grouped according it. To learn how to create and configure descriptors take a look at the following example.

C#

GroupDescriptor descriptor = new GroupDescriptor();
descriptor.Member = "Country";
descriptor.SortDirection = ListSortDirection.Ascending;

VB.NET

Dim descriptor As New GroupDescriptor()
descriptor.Member = "Country"
descriptor.SortDirection = ListSortDirection.Ascending

The Member property defines the property, by which the data will be grouped, and the SortDirection property allows you to define the direction by which the groups will be sorted.

And now you can create a descriptor:

XAML

<telerik:GroupDescriptor Member="Country"
             SortDirection="Ascending" />

To use the created descriptor to sort the data in the RadGridView you have to add it to the GroupDescriptors collection.

XAML

<telerik:RadGridView x:Name="radGridView"
                 AutoGenerateColumns="False">
    <telerik:RadGridView.GroupDescriptors>
        <telerik:GroupDescriptor Member="Country"
                             SortDirection="Ascending" />
    </telerik:RadGridView.GroupDescriptors>
    <!--...-->
</telerik:RadGridView>

C#

this.radGridView.GroupDescriptors.Add(descriptor);

VB.NET

Me.radGridView.GroupDescriptors.Add(descriptor)

After descriptor is defined, the data will be grouped by the Country property and will look as if you have dragged and dropped the Country column header into the grouping area.

Except Member and SortDirection properties, the GroupDescriptor exposes DisplayContent property which allows you to change the content of the rectangle representing the group in the grouping area.

XAML

<telerik:GroupDescriptor Member="Country"
             SortDirection="Ascending"
             DisplayContent="Country Group" />

C#

GroupDescriptor descriptor2 = new GroupDescriptor();
descriptor2.Member = "Country";
descriptor2.SortDirection = ListSortDirection.Ascending;
descriptor2.DisplayContent = "Country Group";

VB.NET

Dim descriptor2 As New GroupDescriptor()
descriptor2.Member = "Country"
descriptor2.SortDirection = ListSortDirection.Ascending
descriptor2.DisplayContent = "Country Group"

In the group rows you are able to display aggregate functions, which display information about the data contained in the group. To learn more about how to add aggregate functions to the group rows take a look at the Group Aggregates topic.

ColumnGroupDescriptor

An alternative way of manipulating the group descriptors of RadGridView is the new (added in Q3 2010) ColumnGroupDescriptor class. It has three important properties:

  • Column - the column that will be grouped

  • DisplayContent - allows you to change the content of the rectangle representing the group that appears in the grouping area.

  • SortDirection - allows you to define the direction by which the groups will be sorted

As you see the last two properties are similar to the same properties of the GroupDescriptor class.

As of Q3 2011 you can add ColumnGroupDescriptor both in code behind and XAML. With all the prior versions you can only set it in code behind.

Here is a code snippet which adds a ColumnGroupDescriptor to RadGridView which groups by the Name column in descending order:

XAML

<telerik:ColumnGroupDescriptor Column="{Binding Columns[\Name\], ElementName=clubsGrid}"
             SortDirection="Descending"  />

C#

this.radGridView.GroupDescriptors.Add(new ColumnGroupDescriptor()
{
    Column = this.radGridView.Columns["Name"],
    SortDirection = ListSortDirection.Descending
});

VB.NET

Me.radGridView.GroupDescriptors.Add(New ColumnGroupDescriptor() With {
 .Column = Me.radGridView.Columns("Name"),
 .SortDirection = ListSortDirection.Descending
})

See Also