在DataGridView中更改列的有效方法

时间:2012-05-16 01:30:26

标签: c# datagridview

您好我有一个空的DatagridView被禁用,直到我开始向其添加行。我有一个组合框,有两个可选选项,可以控制将要加载到哪个信息中,还可以改变其中的列。现在,在组合框的SelectionChanged事件中,我有类似的东西:

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 个答案:

答案 0 :(得分:1)

  1. 将所有0索引列添加到列表
  2. 将所有1个索引列添加到另一个列表
  3. 将列列表传递给您创建的新方法,该方法迭代List以根据需要添加或删除。
  4. 对您的添加/删除方法进行同步锁定。这可能是由于

    而导致出现不同订单的原因

    extractionDataGrid.Columns.Remove(companyIDColumn);

  5. 即。在网格完全更新之前满足条件。 或者更改条件,使其独立于列顺序,以便检查仅在添加和删除所有列之后设置的变量。

    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();
    }
    

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