数据网格视图隐藏列不会保持隐藏状态

本文关键字:隐藏 状态 数据网 网格 视图 数据 | 更新日期: 2023-09-27 18:32:25

我有一个与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;行,但它没有好处。 在此之后,我所做的任何事情都不会使该专栏消失并保持消失。 有什么线索我错过了什么吗?

数据网格视图隐藏列不会保持隐藏状态

写下这一行

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 现在已自动更改其显示。关闭窗体并重新打开它,您将看到返回最初包含/排除的列。此修复程序不需要其他代码。