DevExpress XtraGrid GroupRow,CheckEdit交互可能性

时间:2014-07-24 21:03:44

标签: vb.net devexpress xtragrid

目前,我正在显示包含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()

1 个答案:

答案 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