1

您好,我有一个空的 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 列、调整标题文本、调整自动大小模式和各种其他参数。此外,当我在所选索引之间来回切换时,这实际上每次都会以不同的顺序添加列。它们应该按照我在这里设置的顺序添加??

谢谢。

4

1 回答 1

1
  1. 将所有 0 索引列添加到列表
  2. 将所有 1 个索引列添加到另一个列表
  3. 将列列表传递给您创建的新方法,该方法迭代列表以根据需要添加或删除。
  4. 在您的添加/删除方法上放置一个同步锁。这可能是导致出现不同订单的原因

    extractDataGrid.Columns.Remove(companyIDColumn);

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

IE

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

或者,如果可以的话,不要删除列,而是关闭可见性。

于 2012-05-16T05:20:05.670 回答