How to restrict the removing of grouped columns from GroupDropArea when AllowRemove is enabled in WinForms GridGroupingControl?
GroupDropArea
To restrict the removal of grouped columns from GroupDropArea when AllowRemove is enabled for grouped columns, the CellClick event of GridGroupDropArea can be used.
In the CellClick event,
button bounds for the remove option can be calculated, and the removal
of grouped columns can be restricted by disabling the clicking event
using e.Cancel property when clicking the bounds is on the remove
button bounds.
C#
//Triggering the event.
this.gridGroupingControl1.GridGroupDropArea.CellClick += GridGroupDropArea_CellClick;
//Event Customization.
private void GridGroupDropArea_CellClick(object sender, Syncfusion.Windows.Forms.Grid.GridCellClickEventArgs e)
{
GridGroupDropArea groupDropArea = sender as GridGroupDropArea;
GridStyleInfo style = groupDropArea.Model[e.RowIndex, e.ColIndex];
string cellValue = style.CellValue.ToString();
Rectangle buttonBounds = ButtonArea(groupDropArea,e.RowIndex, e.ColIndex);
if ((cellValue == "Description" || cellValue == "CategoryID") &&
buttonBounds.Contains(e.MouseEventArgs.X, e.MouseEventArgs.Y))
{
e.Cancel = true;
}
}
//Calculate the ButtonBounds for Remove button.
private Rectangle GetRemoveButtonBounds(GridGroupDropArea groupdropArea,int rowIndex,int colIndex)
{
Rectangle cellBounds = groupdropArea.GetCellRenderer(rowIndex, colIndex).GetCellBoundsCore(rowIndex, colIndex);
Rectangle innerBounds;
Rectangle buttonsBounds;
int buttonWidth = 8;
innerBounds = cellBounds;
Rectangle buttonArea = Rectangle.FromLTRB((((innerBounds.Right + 2 - (buttonWidth * 2)))), (innerBounds.Top - 1), (innerBounds.Right), innerBounds.Bottom);
if (groupdropArea.GroupingControl.RightToLeft == System.Windows.Forms.RightToLeft.Yes)
{
buttonArea = Rectangle.FromLTRB(innerBounds.Left, (innerBounds.Top - 1), (((innerBounds.Left + (buttonWidth * 2)))), innerBounds.Bottom);
}
buttonsBounds = GridUtil.CenterInRect(buttonArea, new Size(buttonWidth, 20));
return buttonsBounds;
} VB
'Triggering the event.
AddHandler Me.gridGroupingControl1.GridGroupDropArea.CellClick, AddressOf GridGroupDropArea_CellClick
'Event Customization.
Private Sub GridGroupDropArea_CellClick(ByVal sender As Object, ByVal e As Syncfusion.Windows.Forms.Grid.GridCellClickEventArgs)
Dim groupDropArea As GridGroupDropArea = TryCast(sender, GridGroupDropArea)
Dim style As GridStyleInfo = groupDropArea.Model(e.RowIndex, e.ColIndex)
Dim cellValue As String = style.CellValue.ToString()
Dim buttonBounds As Rectangle = GetRemoveButtonBounds (groupDropArea,e.RowIndex, e.ColIndex)
If (cellValue = "Description" OrElse cellValue = "CategoryID") AndAlso buttonBounds.Contains(e.MouseEventArgs.X, e.MouseEventArgs.Y) Then
e.Cancel = True
End If
End Sub
'Calculate the ButtonBounds for Remove button.
Private Function GetRemoveButtonBounds (ByVal groupdropArea As GridGroupDropArea, ByVal rowIndex As Integer, ByVal colIndex As Integer) As Rectangle
Dim cellBounds As Rectangle = groupdropArea.GetCellRenderer(rowIndex, colIndex).GetCellBoundsCore(rowIndex, colIndex)
Dim innerBounds As Rectangle
Dim buttonsBounds As Rectangle
Dim buttonWidth As Integer = 8
innerBounds = cellBounds
Dim buttonArea_Renamed As Rectangle = Rectangle.FromLTRB((((innerBounds.Right + 2 - (buttonWidth * 2)))), (innerBounds.Top - 1), (innerBounds.Right), innerBounds.Bottom)
If groupdropArea.GroupingControl.RightToLeft = System.Windows.Forms.RightToLeft.Yes Then
buttonArea_Renamed = Rectangle.FromLTRB(innerBounds.Left, (innerBounds.Top - 1), (((innerBounds.Left + (buttonWidth * 2)))), innerBounds.Bottom)
End If
buttonsBounds = GridUtil.CenterInRect(buttonArea_Renamed, New Size(buttonWidth, 20))
Return buttonsBounds
End Function Samples:
Reference Link: Grouping