【问题标题】:Mimicking the UltraGridColumnChooser's drag & drop ability模仿 UltraGridColumnChooser 的拖放功能
【发布时间】:2010-10-09 04:38:46
【问题描述】:

(基础设施 2008 年第 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 调用中,columnUltraGridColumn 类型)和column.HeaderColumnHeader 类型)都不会被网格接受。我假设我发送了错误的类型,和/或网格需要一个特殊的struct 以及一些附加信息。不幸的是,我也未能捕捉到 Infragistics 的普通列选择器正确执行此操作的事件(在列选择器端和网格端);正常的拖放事件似乎永远不会触发。

【问题讨论】:

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


    【解决方案1】:

    看起来该列必须是 UltraTreeNode 才能工作。大概您将列数据放入某种(派生的)UltraTreeNode 中,因此您可能想尝试将其倒出并在 DoDragDrop 调用中使用该对象。

    -- MarkusQ

    【讨论】:

    • 感谢您的回答 — 不幸的是,Infragistics 代表后来澄清说,我确实必须重新实现此行为(也就是说,重用 UltraWinGrid 的常规拖放代码的放置部分不是可能)。
    猜你喜欢
    • 2012-03-06
    • 2019-11-19
    • 1970-01-01
    • 2011-11-10
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多