How to do custom grouping in WinForms GridGroupingControl?
Custom grouping
A more
general way of categorizing records is to add your own custom categorizer object to
the SortColumnDescriptor that defines the group. You can also
add a custom comparer object to the SortColumnDescriptor. When a
column is grouped, it is first sorted. The Comparer object allows you to
control how the sorting is done on your column. Once the column is sorted, the
custom categorizer is used to determine the adjacent records in the sorted
column that belong to the same group. To create custom comparer and categorizer
objects, you can define classes that implement either IComparer (one
method) or ICategorizer (two methods).
Custom Categorizer:
//defines custom categorizer
public class CustomCategorizer : Syncfusion.Grouping.IGroupByColumnCategorizer
{
//defines a group and returns a group category object (here returns 1 through 5)
public static int GetCategory(int i)
{
int ret = 0;
if (i < 10)
ret = 1;
else if (i >= 10 && i < 20)
ret = 2;
else if (i >= 20 && i < 30)
ret = 3;
else if (i >= 30 && i < 40)
ret = 4;
else
ret = 5;
return ret;
}
public object GetGroupByCategoryKey(SortColumnDescriptor column, bool isForeignKey, Record record)
{
return GetCategory(int.Parse(record.GetValue(column).ToString()));
}
public int CompareCategoryKey(SortColumnDescriptor column, bool isForeignKey, object category, Record record)
{
return GetCategory(int.Parse(record.GetValue(column).ToString())) - (int)category;
}
#endregion
}'defines custom categorizer
Public Class CustomCategorizer Implements Syncfusion.Grouping.IGroupByColumnCategorizer
'defines a group and returns a group category object (here returns 1 through 5)
Public Shared Function GetCategory(ByVal i As Integer) As Integer
Dim ret As Integer = 0
If i < 10 Then
ret = 1
ElseIf i >= 10 AndAlso i < 20 Then
ret = 2
ElseIf i >= 20 AndAlso i < 30 Then
ret = 3
ElseIf i >= 30 AndAlso i < 40 Then
ret = 4
Else
ret = 5
End If
Return ret
End Function
Public Function GetGroupByCategoryKey(ByVal column As SortColumnDescriptor, ByVal isForeignKey As Boolean, ByVal record As Record) As Object
Return GetCategory(Integer.Parse(record.GetValue(column).ToString()))
End Function
Public Function CompareCategoryKey(ByVal column As SortColumnDescriptor, ByVal isForeignKey As Boolean, ByVal category As Object, ByVal record As Record) As Integer
Return GetCategory(Integer.Parse(record.GetValue(column).ToString())) - CInt(Fix(category))
End Function
End ClassCustom Comparer class:
//make sure the string integers are sorted as integers instead of strings
public class CustomComparer : IComparer
{
public int Compare(object x, object y)
{
if (x == null)
return -1;
else if (y == null)
return 100;
else
{
int i = int.Parse(x.ToString());
int j = int.Parse(y.ToString());
return i - j;
}
}
}'make sure the string integers are sorted as integers instead of strings
Public Class CustomComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
If x Is Nothing Then
Return -1
ElseIf y Is Nothing Then
Return 100
Else
Dim i As Integer = Integer.Parse(x.ToString())
Dim j As Integer = Integer.Parse(y.ToString())
Return i - j
End If
End Function
End ClassIn the Form_Load event, you can add the categorizer to the grouped columns.
//group "Col2" using a custom categorizer and Comparer
Syncfusion.Grouping.SortColumnDescriptor cd = new Syncfusion.Grouping.SortColumnDescriptor("Col2");
cd.Categorizer = new CustomCategorizer();
cd.Comparer = new CustomComparer();
this.gridGroupingControl1.TableDescriptor.GroupedColumns.Add(cd);'group "Col2" using a custom categorizer and Comparer
Dim cd As New Syncfusion.Grouping.SortColumnDescriptor("Col2")
cd.Categorizer = New CustomCategorizer()
cd.Comparer = New CustomComparer()
Me.gridGroupingControl1.TableDescriptor.GroupedColumns.Add(cd) The
screenshot below illustrates the custom grouping.

Figure 1: custom grouping
Samples:
Reference Link: Custom Grouping