DataGridView隐藏列不会保持隐藏状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataGridView隐藏列不会保持隐藏状态相关的知识,希望对你有一定的参考价值。
我有一个DataGridView绑定到DataTable源。表中元素的数据中有一个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;
行,但它没有用。在这一点之后,我没有做任何事情会使该专栏消失并保持不变。我错过了什么线索?
答案
写下这一行
datagridview1.Columns[0].visible = false;
另一答案
在form_load()中调用此事件
private void dgv_DataBindingComplete(Object sender, DataGridViewBindingCompleteEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
dgv.Columns[3].Visible = false;
}
另一答案
我也遇到过这个问题,但发现您可以在设计时更改datagridview,然后保存项目。运行该应用程序,然后退出该应用程序。设计表单上的dgv现在已自动更改其显示。关闭表单并重新打开它,您将看到返回最初包含/排除的列。此修复程序不需要其他代码。
以上是关于DataGridView隐藏列不会保持隐藏状态的主要内容,如果未能解决你的问题,请参考以下文章
winform中DataGridView 列隐藏时会触发啥事件?