遭遇した問題をデバッグするためのテスト プロジェクトを作成しましたが、ここで何が起こっているのか理解できないようです...このテスト プロジェクトには、フォーム、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 プロパティが null であるためです。 " または " DataGridView コントロールの列の少なくとも 1 つにセル テンプレートがありません。 " (基本的には同じことですが、最初のプロジェクトと初期段階で最初のメッセージしか取得できませんでした。コードを現在の状態に最小化する前のテスト プロジェクト)。奇妙なことに、dgvTest が 1 番目の tagPage に配置されている場合、または Form 自体に直接配置されている場合、この Exception はスローされません。
何か案は?前もって感謝します。