您好我有一个空的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列,调整标题文本,调整自动大小模式和各种其他参数。此外,当我在所选索引之间来回切换时,实际上每次都会以不同的顺序添加列。它们应该按照我在这里设定的顺序添加??
感谢。
答案 0 :(得分:1)
对您的添加/删除方法进行同步锁定。这可能是由于
而导致出现不同订单的原因extractionDataGrid.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();
}
或者,如果这是一个选项,请不要删除列,而是关闭可见性。