模仿UltraGrid列选择器拖动;掉落能力

时间:2009-02-22 18:46:15

标签: .net-2.0 drag-and-drop infragistics ultrawingrid ultratree

(Infragistics 2008 Vol.3,CLR 2.0)

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的正常列选择器正确执行此操作;正常阻力&amp;放下事件似乎永远不会发生。

1 个答案:

答案 0 :(得分:0)

看起来该列必须是UltraTreeNode才能工作。据推测,您正在将列数据放入某种(派生的)UltraTreeNode中,因此您可能希望尝试将其倾析并在DoDragDrop调用中使用该对象。

- MarkusQ