Невозможно восстановить индекс отображения в представлении данных - PullRequest
0 голосов
/ 17 декабря 2010

Итак, у меня есть класс, который я использую для фильтрации результатов просмотра данных в 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

Есть идеи, почему индексы дисплея не восстанавливаются должным образом?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Вы должны перебирать столбцы в порядке отображения, начиная с нуля; в противном случае столбцы будут выходить из строя по ходу цикла.

0 голосов
/ 20 декабря 2010

Я нашел обходной путь, чтобы иметь вторую хеш-таблицу, в которой хранится индекс отображения.По какой-то причине, как я делал это изначально, индекс дисплея менялся.Но не другие значения, на которые я ссылался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...