1

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

4

3 回答 3

1

只写这一行

datagridview1.Columns[0].visible = false;
于 2012-05-08T10:45:07.720 回答
0

在你的 form_load() 中调用这个事件

    private void dgv_DataBindingComplete(Object sender, DataGridViewBindingCompleteEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;
        dgv.Columns[3].Visible = false;
    }
于 2013-07-05T10:52:38.347 回答
0

我也遇到过这个问题,但是发现你可以在设计的时候让你的datagridview修改然后保存项目。运行应用程序,然后退出应用程序。设计表单上的 dgv 现在已自动更改其显示。关闭表单并重新打开它,您将看到您最初包含/排除的列被返回。此修复不需要额外的代码。

于 2013-10-28T11:03:05.980 回答