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