Имитация возможности перетаскивания UltraGridColumnChooser

(Инфрагистика, 2008 г., том 3, CLR 2.0)

UltraGrid от Infragistics поставляется с пользовательским элементом управления выбора столбца, который представляет собой просто вертикальное расположение столбцов с флажками, которые переключают скрытое состояние столбца. Кроме того, он позволяет вам выбрать столбец и перетащить его прямо в сетку, чтобы впоследствии вам не приходилось вручную позиционировать его. (Это особенно удобно, когда у вас уже есть много видимых столбцов и вы понятия не имеете, где оказался новый.)

Я создаю свой собственный выбор столбца на основе 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 делает это правильно; обычные события перетаскивания никогда не срабатывают.


person Sören Kuklau    schedule 22.02.2009    source источник


Ответы (1)


Похоже, что столбец должен быть UltraTreeNode, чтобы это работало. Предположительно, вы помещаете данные столбца в какой-то (производный) UltraTreeNode, поэтому вы можете попробовать декантировать его и использовать этот объект в вызове DoDragDrop.

-- МаркусКью

person MarkusQ    schedule 03.03.2009
comment
Спасибо за ваш ответ - к сожалению, представитель Infragistics с тех пор пояснил, что мне действительно придется повторно реализовать это поведение (то есть повторное использование части перетаскивания UltraWinGrid обычного кода Drag & Drop невозможно). - person Sören Kuklau; 03.03.2009