从DataGridView中删除列

时间:2012-01-19 17:43:13

标签: c# winforms datagridview

我有一个包含Users表的数据库,我在DataGridView中显示数据。我想删除4列,但我的代码(从MSDN引用)似乎在末尾追加列。我怎样才能完全删除列?

所以这就是DGV在没有删除列的情况下的外观

Without Removal Code

我用来搜索和删除列的代码

RadarServerEntities rse = new RadarServerEntities();
gvUsers.DataSource = rse.Users;

gvUsers.Columns.Remove("ID");
gvUsers.Columns.Remove("InsertDate");
gvUsers.Columns.Remove("Connections");
gvUsers.Columns.Remove("MachineID");

结果

With Removal Code

我想摆脱最后4列,那么为什么我的代码不做呢?

非常感谢:)

7 个答案:

答案 0 :(得分:15)

我倾向于隐藏字段。

gvUsers.Columns["ID"].Visibility = false;

等等。

答案 1 :(得分:5)

你也可以使用gvUsers.Columns.RemoveAt(IndexOfColumn);

答案 2 :(得分:4)

如果您不想在绑定DataSource时自动创建列,则需要设置gvUsers.AutoGenerateColumns = false;

RadarServerEntities rse = new RadarServerEntities();
gvUsers.AutoGenerateColumns = false;
gvUsers.DataSource = rse.Users;

答案 3 :(得分:1)

要真正删除自动生成的列,必须在数据绑定后关闭自动生成。

因此代码将是:

RadarServerEntities rse = new RadarServerEntities();
gvUsers.DataSource = rse.Users;
gvUsers.AutoGenerateColumns = false;
gvUsers.Columns.Remove("ID");
gvUsers.Columns.Remove("InsertDate");
gvUsers.Columns.Remove("Connections");
gvUsers.Columns.Remove("MachineID");

我还没有检查到底发生了什么,但是可能在DGV可见的那一刻,丢失的列会重新生成。

因此,使用此解决方案,您将在绑定数据时生成列,然后将其关闭并删除不需要的列。丢失的列无法重新生成。

答案 4 :(得分:0)

DataGridViewColumn DataGridViewColumnSelected;   
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
                    if (e.ColumnIndex !=-1 && e.RowIndex == -1)
                    {
                        DataGridViewColumnSelected = dataGridView1.Columns[e.ColumnIndex] as DataGridViewColumn;

                    }
}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            bool bHandled = false;
            switch (keyData)
            {
                case Keys.Delete:
                    if (DataGridViewColumnSelected != null)
                    {
                        this.dataGridView1.Columns.RemoveAt(DataGridViewColumnSelected.Index);
                        //dataGridView1.Columns[DataGridViewColumnSelected.Name].Visible = false;  // case of just hiding the column
                    }
                    break;
            }
            return bHandled;
        }

答案 5 :(得分:0)

我认为您必须先修改DataTable,然后再将其传递给DGV

如下:

RadarServerEntities rse = new RadarServerEntities();
rse.Users.Columns.Remove("ID");
rse.Users.Columns.Remove("InsertDate");
rse.Users.Columns.Remove("Connections");
rse.Users.Columns.Remove("MachineID");
dgvUsers.DataSource=rse.Users;

这种方法对我有用

答案 6 :(得分:-1)

如果您要从DataGridView中删除的是您选择的列,那么此代码适合您。

将此代码放置在“删除”按钮中,即可删除所选的列。

int rowIndex = TuDataGrigView1.CurrentCell.RowIndex;
TuDataGrigView1.Rows.RemoveAt(rowIndex);