Итак, у меня есть класс, который я использую для фильтрации результатов просмотра данных в vb.net. И одна из вещей, которые я хочу сделать этим классом, это сохранить порядок столбцов, ширину и видимость.
Итак, когда я создаю экземпляр класса поиска, я создаю копию столбцов в хеш-таблице для последующей ссылки.
Private dgv As DataGridView
Private dataSet As DataSet
Private bindingSource As New BindingSource
Dim ht As New Hashtable()
Public Sub new( ByRef dgv As DataGridView, ByVal dataSet As dataset )
Me.dgv = dgv
Me.dataSet = dataSet
For Each col As DataGridViewColumn In dgv.Columns
ht.Add( col.headertext, col )
Next
End Sub
Затем я фильтрую это так ...
Public Sub quickFilter( ByVal searchterm As string, ByVal tablename As String, optional ByVal colname As string = Nothing )
dgv.DataSource = dataSet
dgv.DataMember = tablename
bindingSource.DataSource = CType( dgv.DataSource, DataSet ).Tables.Item( tablename )
bindingSource.Filter = determineColumnsFilter( searchterm, colname )
dgv.DataSource = bindingSource.DataSource
restoreCols()
End Sub
Смущает то, что функция восстановления столбцов правильно восстанавливает ширину и видимость, но не индекс отображения. Кажется, он перемешивает колонны любым способом, каким захочет.
Private Sub restoreCols()
For Each col As DataGridViewColumn In dgv.Columns
Dim colcopy As DataGridViewColumn = ht( col.headertext )
col.Width = colcopy.Width
col.Visible = colcopy.Visible
col.DisplayIndex = colcopy.DisplayIndex
Next
End Sub
Есть идеи, почему индексы дисплея не восстанавливаются должным образом?
Спасибо