目前,我正在显示包含Group Rows的XtraGrid。我有一个“全选”DevExpress.XtraEditors.CheckEdit控件(这与我在文档中阅读的这个难以捉摸的“全选”复选框控件不同)。这是不同的原因:我希望复选框可以执行除“全选”之外的其他操作(根据DevExpress Docs,它只有三种不同的类型)。
我希望用户能够使用CheckEdit控件执行两项操作之一。 [1]如果没有扩展组行,我想选择所有组行。 [2]如果扩展了一个或多个组行,我只想选择扩展行。
目前,我能够操纵控件只做两件事之一(见代码)。我的问题有两个:这是可能的;如果是的话,我该怎么做呢?
这是我的代码,它执行上述两个“事物”中的第二个:
'If the CheckEdit control is checked:
xtraGrid.SelectAll()
Dim rowHandles() As Int32 = xtraGrid.GetSelectedRows()
If rowHandles.Count > 0 Then
For Each RowHandle As Int32 In rowHandles
If xtraGrid.IsGroupRow(RowHandle) Then
xtraGrid.UnselectRow(RowHandle)
End If
Next
End If
正如您所看到的,所有这些只是一种解决方法。在调用.GetSelectedRows()
时,可能还需要更多的开销。我只是尝试对行类型进行排序,以便保持选定的行或.UnselectRow()
答案 0 :(得分:1)
您可以使用GridView.GetRowExpanded
方法检查特定组行是否已展开。对于迭代可见行,您可以使用GridView.RowCount
属性。要获得行级别,只需使用GridView.GetRowLevel
方法。此外,您需要使用GridView.IsNewItemRow
方法和GridView.IsFilterRow
方法检查一行是新项目行还是过滤行。对于所有这些方法,您需要使用GridView.GetVisibleRowHandle
方法获取Row handle
。当您使用选择时,最好在代码之外使用GridView.BeginSelection
方法和GridView.EndSelection
方法
更新:如果您要在折叠组中选择隐藏的行,则可以使用GridView.GetChildRowCount
方法和GridView.GetChildRowHandle
方法获取所有隐藏的行。
以下是一些示例代码,它们共同执行两项任务:
Private Sub SomeSub
If xtraGrid.GroupCount = 0 Then
xtraGrid.SelectAll()
Exit Sub
End If
xtraGrid.BeginSelection()
xtraGrid.ClearSelection()
Dim isExpanded As Boolean = False
For rowVisibleIndex = 0 To xtraGrid.RowCount - 1
Dim rowHandle As Integer = xtraGrid.GetVisibleRowHandle(rowVisibleIndex)
If xtraGrid.IsNewItemRow(rowHandle) Then
Continue For
End If
Dim level As Integer = xtraGrid.GetRowLevel(rowHandle)
If level = 0 Then
If Not isExpanded Then
isExpanded = xtraGrid.GetRowExpanded(rowHandle)
If isExpanded Then
xtraGrid.ClearSelection()
Else
xtraGrid.SelectRow(rowHandle)
End If
End If
Else
xtraGrid.SelectRow(rowHandle)
'Update: select hidden rows
If xtraGrid.IsGroupRow(rowHandle) And Not xtraGrid.GetRowExpanded(rowHandle) Then
SelectRowHierarchy(rowHandle)
End If
End If
Next
xtraGrid.EndSelection()
End Sub
Private Sub SelectRowHierarchy(rowHandle As Integer)
Dim childCount As Integer = xtraGrid.GetChildRowCount(rowHandle)
For childIndex As Integer = 0 To childCount - 1
Dim childRowHandle As Integer = xtraGrid.GetChildRowHandle(rowHandle, childIndex)
xtraGrid.SelectRow(childRowHandle)
If xtraGrid.IsGroupRow(childRowHandle) Then
SelectRowHierarchy(childRowHandle)
End If
Next
End Sub