2016-03-02 121 views
0

我終止到配置文件之前,保存我的Datagrid的每列的顯示索引。 重新啓動應用程序時,我想要在終止之前恢復列的順序。 這不起作用。 這裏是我的代碼重新排序:重新排序datagridview的列不工作

Private Sub reorderColumns() 
     'convert the list of KeyValuePairs to a dictionary for easier access 
     Try 
      For Each column As DataGridViewColumn In MainDGV.Columns 
       column.DisplayIndex = SettingsKeeper.getInstance.positionOfColumnInGrid(column.Name) 
      Next 
     Catch ex As KeyNotFoundException 
      'Ignore, this means the config was not good, which generally means it was not yet 
      'created once 
     Catch ex As Exception 
      printErrorMessage(ex,ErrorCodes.Class_ReorderColumns) 
     End Try 
    End Sub 
在我的初始化函數

,我也跟着從這個post有關的AutoGenerateColumns屬性的提醒,但這並沒有解決任何問題。

這是我的事實上的構造函數,它需要在初始化之後調用:

Public Sub init() 
     dt = New DataTable 
     Dim arr(CentralControl.dgvColumns.Count - 1) As String 

     Dim i As Integer = 0 
     For Each att As String In CentralControl.DataTemplate.Keys 
      dt.Columns.Add(att, GetType(String)) 
      arr(i) = "No Data" 
      i += 1 
     Next 

     For i = 1 To SettingsKeeper.getInstance.numberRows 
      dt.Rows.Add(arr) 
     Next 

     MainDGV.AutoGenerateColumns = True 
     MainDGV.DataSource = dt 
     MainDGV.AutoGenerateColumns = False 
     reorderColumns() 
    End Sub 

我的DataTemplate在現實中是包含DataColumn的關鍵和計算此列的值的一些規則的名稱字典作爲字典條目的值。

回答

0

解決方案我會用,直到我找到更清潔: 變化初始化函數咯:

Public Sub init() 
    dt = New DataTable 
    Dim arr(CentralControl.dgvColumns.Count - 1) As String 

    Dim i As Integer = 0 
    For Each att As String In CentralControl.DataTemplate.Keys 
     dt.Columns.Add(att, GetType(String)) 
     arr(i) = "No Data" 
     i += 1 
    Next 

    For i = 1 To SettingsKeeper.getInstance.numberRows 
     dt.Rows.Add(arr) 
    Next 
    MainDGV.AutoGenerateColumns = False 
    MainDGV.DataSource = dt 
    'changes: 
    Dim sorted As New SortedDictionary(Of Integer, String) 
    For Each pair In SettingsKeeper.getInstance.positionOfColumnInGrid 
     sorted.Add(pair.Value, pair.Key) 
    Next 


    For Each col In sorted 
     Dim dgvcol As New DataGridViewTextBoxColumn 
     dgvcol.HeaderText = col.Value 
     dgvcol.Name = col.Value 
     dgvcol.DataPropertyName = col.Value 
     MainDGV.Columns.Add(dgvcol) 
    Next 
end sub