2010-12-17 8 views
0

だから、vb.netのdatagridviewの結果をフィルタリングするために使用するクラスがあります。そして、私がこのクラスにやりたいことの一つは、列の順序、幅、可視性を保つことです。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 

表示インデックスが正しく復元されない理由は何ですか?

おかげ

答えて

0

私の周りの仕事が表示インデックスを格納する第2ハッシュテーブルを持つことである見つけました。何らかの理由で、私が最初にやっていたやり方では、ディスプレイのインデックスが変化していました。しかし私が参照していた他の値はありません。

0

ゼロから始まる表示順序の順に列をループする必要があります。それ以外の場合は、ループの進行に伴って列の順序が乱れることになります。

関連する問題