所以我有一个类用于过滤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
知道显示索引无法正常恢复的原因吗?
由于
答案 0 :(得分:0)
我发现解决方法是使用第二个哈希表来存储显示索引。出于某种原因,我最初的做法,显示索引正在发生变化。但不是我引用的其他值。
答案 1 :(得分:0)
您必须按显示顺序的顺序遍历列,从零开始;否则随着循环的进行,列将无序。