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