DataTableソースに関連付けられたDataGridViewがあります。表の要素のデータの中には、非表示のままにしておきたいGuidがあります。(参照用に内部的に使用されていますが、表示しないでください。)テーブルの作成に使用しているコードは次のとおりです。
private DataTable mEntities = new DataTable();
private System.Windows.Forms.DataGridView EntitiesGridView;
これらは他の場所で宣言されており、参照用にここに示しています。
private void BuildEntityTable()
{
mEntityTable.Columns.Add("id", typeof(Guid));
mEntityTable.Columns.Add("Name", typeof(string));
... (some other columns)
foreach (Foo foo in mEntities)
{
DataRow row = mEntityTable.NewRow();
row["id"] = foo.id;
row["Name"] = foo.Name;
... (rest of data)
mEntityTable.Rows.Add(row);
}
DataColumn[] entityKeys = new DataColumn[1];
entityKeys[0] = entityTable.Columns["id"];
mEntityTable.PrimaryKey = entityKeys;
EntitiesGridView.DataSource = mEntityTable.DefaultView;
EntitiesGridView.Columns["id"].visible = false;
}
ここまでは順調ですね。テーブルが作成され、表示される「id」列はありません。ただし、後でテーブルに新しいオブジェクトを追加すると、問題が発生します。コードはほとんど同じです:
void AddNewObject(object sender, MyArgs e)
{
Foo foo = e.Foo;
lock (mEntities)
{
mEntities.Add(foo);
}
lock (mEntityTable)
{
DataRow row = mEntityTable.NewRow();
row["id"] = foo.id;
row["Name"] = foo.Name;
... (rest of data)
mEntityTable.Rows.Add(row);
}
}
何らかの理由で、これにより「id」列が返されます。EntitiesGridView.Columns["id"].visible = false;
前のコードから行をコピーしようとしましたが、うまくいき ません。この時点以降、私が何もしなければ、その列は消えてしまいます。私が欠けているものの手がかりはありますか?