Custom grouping is done via code. First, the desired groups must be created and added to the GroupTemplates property of the grid. Next, the grid's QueryGroupKeys event needs to be handled and the code necessary to group the data rows added.
Keep in mind that in order for the groups to be sorted, their GroupBy property must be set.
It is also possible to derive from the Group class and override the CalculateKey method to provide custom grouping.
To subscribe to the QueryGroupKeys event, the following steps must be performed:
Add the desired number of groups to the grid's GroupTemplates property.
Subscribe to the QueryGroupKeys event of the GridControl object using the generic EventHandler delegate class
Create a new method that will handle the events that are raised.
Place the desired code in the newly created event handler.
To subscribe to the QueryGroupKeys event, the following steps must be performed:
Add the desired number of groups to the grid's GroupTemplates property.
Select the QueryGroupKeys event from the list of available methods in the newly instantiated GridControl object. This is done in the same manner as, for example, adding the DoubleClick event of a ListBox.
Place the desired code in the newly added event handler.
The following example will group all the data rows according to the value of the ShipCountry cell. All data rows whose ShipCountry cell's value begins with A to M will be grouped together while those from N to Z will be grouped together.
The second group level will regroup all data rows according to the value of the ShipCity cell. All data rows whose ShipCity cell's value begin with the 2 same letters will be grouped together. For example, Mannheim and Marseille will be regrouped together.
VB.NET |
Copy Code |
---|---|
Imports Xceed.Grid gridControl1.GroupTemplates.Add( New Group( "ShipCountry" ) ) gridControl1.GroupTemplates.Add( New Group( "ShipCity" ) ) AddHandler gridControl1.QueryGroupKeys, AddressOf Me.grid_QueryGroupKeys ' This method will handle the QueryGroupKeys events that are raised. Private Sub grid_QueryGroupKeys( ByVal sender As Object, _ ByVal e As QueryGroupKeysEventArgs ) Handles gridControl1.QueryGroupKeys Dim countryValue As String = e.DataRow.Cells( "ShipCountry" ).Value.ToString().Substring( 0, _ 1 ).ToUpper() If( countryValue.CompareTo( "M" ) > 0 ) Then e.GroupKeys( 0 ) = "N-Z" Else e.GroupKeys( 0 ) = "A-M" End If Dim cityValue As String = e.DataRow.Cells( "ShipCity" ).Value.ToString().Substring( 0, _ 2 ).ToUpper() e.GroupKeys( 1 ) = cityValue End Sub |
C# |
Copy Code |
---|---|
using Xceed.Grid; gridControl1.GroupTemplates.Add( new Group( "ShipCountry" ) ); gridControl1.GroupTemplates.Add( new Group( "ShipCity" ) ); gridControl1.QueryGroupKeys += new QueryGroupKeysEventHandler( this.grid_QueryGroupKeys ); // This method will handle the QueryGroupKeys events that are raised. private void grid_QueryGroupKeys( object sender, QueryGroupKeysEventArgs e ) { try { string countryValue = e.DataRow.Cells[ "ShipCountry" ].Value.ToString().Substring( 0, 1 ).ToUpper(); if( countryValue.CompareTo( "M" ) > 0 ) { e.GroupKeys[ 0 ] = "N-Z"; } else { e.GroupKeys[ 0 ] = "A-M"; } string cityValue = e.DataRow.Cells[ "ShipCity" ].Value.ToString().Substring( 0, 2 ).ToUpper(); e.GroupKeys[ 1 ] = cityValue; } catch( Exception exception ) { MessageBox.Show( exception.ToString() ); } } //If you no longer wish to handle the QueryGroupKeys events that are raised, //you can unsubscribe from the event notification by doing the following: gridControl1.QueryGroupKeys -= new QueryGroupKeysEventHandler( this.grid_QueryGroupKeys ); |