(Infragistics的2008年第3卷,CLR 2.0)模仿UltraGridColumnChooser的拖放能力
的Infragistics的UltraGrid
带有一个列选择器的用户控制,这简直是列与切换列的隐藏状态的复选框的垂直布置。此外,它允许您选择一个列并将其直接拖到网格中,以便以后不必手动定位。 (当你已经有很多可见的列并且不知道新结束的位置时,这是特别方便的。)
我正在构建基于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正常的列选择器正确地执行此操作的事件(在列选择器一侧以及在网格一侧)正常的拖动事件似乎从来不会触发。
谢谢您的回答 - 不幸的是,一个Infragistics的代表从此澄清我的确会不得不重新实现此行为(即重用常规拖放代码ISN的UltraWinGrid的下落部不可能)。 – 2009-03-03 18:10:14