2012-05-16 50 views
1

你好我有一個空的DatagridView被禁用,直到我開始向它添加行。我有一個組合框,它有兩個可選選項來控制將要加載的信息,並且還會改變那裏的列。眼下的SelectionChanged事件組合框我有類似:更改DataGridView中列的高效方法

if (defaultComboBox.SelectedIndex == 0) 
    { 
    if (extractionDataGrid.Columns.Contains(companyIDColumn)) 
     { 
     extractionDataGrid.Columns.Remove(companyIDColumn); 
     extractionDataGrid.Columns.Remove(companyNameColumn); 
     extractionDataGrid.Columns.Remove(maintenanceColumn); 
     extractionDataGrid.Columns.Remove(simColumn); 
     } 

     extractionDataGrid.Columns.Add(userNameColumn); 
     extractionDataGrid.Columns.Add(departmentColumn); 
     extractionDataGrid.Columns.Add(officePhoneColumn); 
     extractionDataGrid.Columns.Add(officePhontExtColumn); 
     extractionDataGrid.Columns.Add(otherPhoneColumn); 
. [18 columns] 
. 
. 
. 

並且對方爲1.所選指數有相當這裏幾列,並且正在努力想辦法,以避免巨大可以初始化新的datagridview列,調整標題文本,調整自動調整大小模式以及其他各種參數。另外,當我在所選索引之間來回切換時,這實際上每次都以不同順序添加列。他們應該添加在我設置的順序?

謝謝。

回答

1
  1. 所有的0索引列添加到列表
  2. 所有1個索引列添加到另一個目錄
  3. 傳遞列的列表,以一種新的方法,你創建一個迭代列表中添加或刪除有必要的。
  4. 在您的添加/刪除方法上添加同步鎖。這可能是由於

    extractDataGrid.Columns.Remove(companyIDColumn);

即在網格完全更新之前滿足條件。 或者更改條件,使其與列順序無關,以便它檢查僅在所有列已被添加和刪除後設置的變量。

switch (gridMode){ 
    case GridMode.Company: 
    this.AddColumns(userColumnList); 
    gridMode = GridMode.User; 
    break; 
    case GridMode.User: 
    this.AddColumns(userColumnList); 
    gridMode = GridMode.Company; 
    break; 
} 

protected void AddColumns(List<Column> adds){ 
    extractDataGrid.Layout.Suspend(); 
    extractionDataGrid.Columns.Clear(); 
    foreach(Column c in adds){ 
    extractionDataGrid.Columns.Add(c); 
    } 
extractDataGrid.Layout.Resume(); 
} 

或者不刪除列,而是關閉可見,如果這是一個選項。