我有一个绑定到 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;
从以前的代码中复制该行,但它没有用。在此之后我所做的任何事情都不会使该列消失并保持消失。任何线索我错过了什么?