我刚刚创建了一个测试项目来调试我遇到的问题,但似乎无法理解这里发生了什么......在这个测试项目中,我只有一个 Form、一个 TabControl 和一个 DataGridView(称为 dgvTest)在 tabControl(第 2 页或更高版本)内的“背景”页面中。这是我用来重现问题的代码:
private void Form1_Load(object sender, EventArgs e)
{
dgvTest.DataSource = GetDataSource();
DataGridViewColumn customColumn = new DataGridViewColumn(new DataGridViewTextBoxCell());
customColumn.DataPropertyName = "SampleColumn";
dgvTest.Columns.Insert(dgvTest.Columns["SampleColumn"].Index, customColumn);
//#region Attempt #1
//dgvTest.Columns.Remove("SampleColumn");
//customColumn.Name = "SampleColumn";
//#endregion
#region Attempt #2
dgvTest.Columns["SampleColumn"].Visible = false;
customColumn.Name = "SampleColumnCbo";
#endregion
dgvTest.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
private DataTable GetDataSource()
{
DataTable result = new DataTable();
result.Columns.Add("SampleColumn");
result.Columns.Add("Q");
//no rows needed
return result;
}
现在,如果我运行它,DataGridView 只会在我尝试选择它所在的 tabPage 后完全初始化(我的意思是,调用它的 AutoGenerateDataBoundColumns)......此时它会抛出一个 InvalidOperationException,显示“无法添加列因为它的 CellType 属性为空。 ”或“至少有一个 DataGridView 控件的列没有单元格模板。 ”(基本上,同样的事情;但我只在我的初始项目和早期阶段收到了第一条消息测试项目,在我将代码最小化到当前状态之前)。奇怪的是,如果 dgvTest 放在第一个 tagPage 上或直接放在 Form 本身内,则不会抛出此异常。
有任何想法吗?提前致谢。