How to change the WinForms GridGroupingControl text in GroupHeader and GroupFooter?
Change the text
When loading the GridGroupingControl, the values of the header or footer will not be displayed because grid's underlying data source doesn't maintain the data of these headers and footer. So, we need to manually populate/show the values of GroupHeaders or Footers.
Solution:
To show the GroupHeaders or GroupFooters, ShowGroupHeader and ShowGroupFooter properties will be used. QueryCellInfo event is used to display the needed text on these header/footer cells. The modified cell text can be retrieved through 'CurrentCellControlLostFocus' event.
In the given code sample, the global variables 'header' and 'footer' will be used to retrieve or display the content using QueryCellInfo and CurrentCellControlLostFocus events.
C#
this.gridGroupingControl1.TopLevelGroupOptions.ShowGroupHeader = true;
this.gridGroupingControl1.TopLevelGroupOptions.ShowGroupFooter = true;
this.gridGroupingControl1.QueryCellStyleInfo += new GridTableCellStyleInfoEventHandler(gridGroupingControl1_QueryCellStyleInfo);
this.gridGroupingControl1.TableControl.CurrentCellControlLostFocus += TableControl_CurrentCellControlLostFocus;
void gridGroupingControl1_QueryCellStyleInfo(object sender, GridTableCellStyleInfoEventArgs e)
{
//assigning the GroupHeader text
if(e.TableCellIdentity.TableCellType== GridTableCellType.GroupHeaderSectionCell )
{
e.Style.Text = header;
}
//assigning the GroupFooter text
else if(e.TableCellIdentity.TableCellType == GridTableCellType.GroupFooterSectionCell)
{
e.Style.Text = footer;
}
}
void TableControl_CurrentCellControlLostFocus(object sender, ControlEventArgs e)
{
GridTableControl table = (sender as GridTableControl);
GridTableCellStyleInfo style = table.GetTableViewStyleInfo(table.CurrentCell.RowIndex, table.CurrentCell.ColIndex);
//save the header text
if (style.TableCellIdentity.TableCellType == GridTableCellType.GroupHeaderSectionCell)
header = e.Control.Text;
//save the footer text
else if (style.TableCellIdentity.TableCellType == GridTableCellType.GroupFooterSectionCell)
footer = e.Control.Text;
}
VB
Me.gridGroupingControl1.TopLevelGroupOptions.ShowGroupHeader = True
Me.gridGroupingControl1.TopLevelGroupOptions.ShowGroupFooter = True
AddHandler gridGroupingControl1.QueryCellStyleInfo, AddressOf gridGroupingControl1_QueryCellStyleInfo
AddHandler Me.gridGroupingControl1.TableControl.CurrentCellControlLostFocus, AddressOf TableControl_CurrentCellControlLostFocus
Private Sub gridGroupingControl1_QueryCellStyleInfo(ByVal sender As Object, ByVal e As GridTableCellStyleInfoEventArgs)
‘assigning the GroupHeader text
If e.TableCellIdentity.TableCellType= GridTableCellType.GroupHeaderSectionCell Then
e.Style.Text = header
‘assigning the GroupFooter text
ElseIf e.TableCellIdentity.TableCellType = GridTableCellType.GroupFooterSectionCell Then
e.Style.Text = footer
End If
End Sub
Private Sub TableControl_CurrentCellControlLostFocus(ByVal sender As Object, ByVal e As ControlEventArgs)
Dim table As GridTableControl = (TryCast(sender, GridTableControl))
Dim style As GridTableCellStyleInfo = table.GetTableViewStyleInfo(table.CurrentCell.RowIndex, table.CurrentCell.ColIndex)
‘save the header text
If style.TableCellIdentity.TableCellType = GridTableCellType.GroupHeaderSectionCell Then
header = e.Control.Text
‘save the footer text
ElseIf style.TableCellIdentity.TableCellType = GridTableCellType.GroupFooterSectionCell Then
footer = e.Control.Text
End If
End Sub
Image:
Reference link: https://help.syncfusion.com/windowsforms/gridgrouping/grouping#groupby-options