2009-02-22 29 views
0

(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正常的列选择器正确地执行此操作的事件(在列选择器一侧以及在网格一侧)正常的拖动事件似乎从来不会触发。

回答

0

它看起来像列将不得不是UltraTreeNode的工作。假设你将列数据放入某种(派生的)UltraTreeNode中,所以你可能想尝试滗析它并在DoDragDrop调用中使用该对象。

- MarkusQ

+0

谢谢您的回答 - 不幸的是,一个Infragistics的代表从此澄清我的确会不得不重新实现此行为(即重用常规拖放代码ISN的UltraWinGrid的下落部不可能)。 – 2009-03-03 18:10:14