(基础设施 2008 年第 3 卷,CLR 2.0)
InfragisticsUltraGrid
带有一个列选择器用户控件,它只是垂直排列的列,带有切换列隐藏状态的复选框。此外,它允许您选择一列并将其直接拖到网格中,这样您就不必事后手动定位它。(当您已经有很多可见的列并且不知道新列在哪里结束时,这特别方便。)
我正在基于UltraTree
. 让复选框的行为相同不是问题,但我还没有找到一种方法将列从树拖到网格并让它接受它。
在我的树中,每个UltraTreeNode
都有Tag
以下内容struct
:
Private Structure DraggableGridColumn
Public NodeKey As String
Public NodeName As String
Public ParentKey As String
Public Column As UltraGridColumn
End Structure
然后我有一个事件如下:
Private Sub columnsTree_SelectionDragStart(ByVal sender As Object, ByVal e As System.EventArgs) Handles columnsTree.SelectionDragStart
If columnsTree.SelectedNodes.Count <> 1 Then
Return
End If
If Not TypeOf columnsTree.SelectedNodes(0).Tag Is DraggableGridColumn Then
Return
End If
Dim column As UltraGridColumn = CType(columnsTree.SelectedNodes(0).Tag, DraggableGridColumn).Column
columnsTree.DoDragDrop(column, DragDropEffects.All)
End Sub
在DoDragDrop
调用中,column
(类型UltraGridColumn
)和column.Header
(类型ColumnHeader
)都不会被网格接受。我假设我发送了错误的类型,和/或网格需要struct
带有一些附加信息的特殊信息。不幸的是,我也未能捕捉到 Infragistics 的普通列选择器正确执行此操作的事件(在列选择器端和网格端);正常的拖放事件似乎永远不会触发。