2012-05-16 34 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(); 
} 

或者不删除列,而是关闭可见,如果这是一个选项。