Description:
How to prevent group rows from being selected in multi-select mode?
Answer:
You can deselect group rows inside the SelectionChanged event handler.
Here is the necessary code for the XtraGrid v2:
Visual BasicPrivate Sub GridView1_SelectionChanged(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.SelectionChangedEventArgs) Handles GridView1.SelectionChanged
Dim View As GridView = CType(sender, GridView)
If e.Added AndAlso View.IsGroupRow(e.RowHandle) Then
View.UnselectRow(e.RowHandle)
End If
If e.AllSelectionChanged AndAlso View.SelectedRowsCount > 0 Then
Dim Row As Integer
For Each Row In View.GetSelectedRows()
If View.IsGroupRow(Row) Then View.UnselectRow(Row)
Next
End If
End Sub
The code for the XtraGrid v3:
C#bool isRunning = false;
private void gridView1_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) {
if(isRunning) return;
isRunning = true;
GridView View = sender as GridView;
if(e.Action == CollectionChangeAction.Add && View.IsGroupRow(e.ControllerRow)) {
View.UnselectRow(e.ControllerRow);
}
if(e.Action == CollectionChangeAction.Refresh && View.SelectedRowsCount > 0) {
View.BeginSelection();
foreach(int Row in View.GetSelectedRows()) {
if(View.IsGroupRow(Row)) View.UnselectRow(Row);
}
View.EndSelection();
}
isRunning = false;
}
Visual BasicDim IsRunning As Boolean = False
Private Sub GridView1_SelectionChanged(ByVal sender As System.Object, ByVal e As DevExpress.Data.SelectionChangedEventArgs) Handles GridView1.SelectionChanged
If IsRunning Then Return
IsRunning = True
Dim View As GridView = CType(sender, GridView)
If e.Action = System.ComponentModel.CollectionChangeAction.Add AndAlso View.IsGroupRow(e.ControllerRow) Then
View.UnselectRow(e.ControllerRow)
End If
If e.Action = System.ComponentModel.CollectionChangeAction.Refresh AndAlso View.SelectedRowsCount > 0 Then
View.BeginSelection()
Dim Row As Integer
For Each Row In View.GetSelectedRows()
If (View.IsGroupRow(Row)) Then View.UnselectRow(Row)
Next
View.EndSelection()
End If
IsRunning = False
End Sub