Подражая перетаскиванию способности UltraGridColumnChooser - PullRequest
0 голосов
/ 22 февраля 2009

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

1 Ответ

0 голосов
/ 03 марта 2009

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

- MarkusQ

...