无法在datagridview中恢复显示索引

时间:2010-12-17 06:22:04

标签: vb.net datagridview

所以我有一个类用于过滤vb.net中datagridview的结果。我希望这个类要做的事情之一是保持列顺序,宽度和可见性。

所以我做的是,当我的搜索类被实例化时,我在哈希表中创建了一个列的副本,供以后引用。

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

令人困惑的部分,是恢复cols功能正确恢复宽度和可见性,但不是显示索引。它似乎以任何选择的方式对列进行洗牌。

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 :(得分:0)

我发现解决方法是使用第二个哈希表来存储显示索引。出于某种原因,我最初的做法,显示索引正在发生变化。但不是我引用的其他值。

答案 1 :(得分:0)

您必须按显示顺序的顺序遍历列,从零开始;否则随着循环的进行,列将无序。