winforms 从DataGridView中删除列

ltskdhd1  于 2023-04-07  发布在  其他
关注(0)|答案(8)|浏览(235)

我有一个数据库,它有一个Users表,我在DataGridView中显示数据。我想删除4列,但我的代码(从MSDN引用)似乎在最后附加了列。我如何才能完全删除列?
这就是没有移除柱子的DGV的样子

我用来尝试和删除列的代码

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

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

结果

我想去掉最后4列,那么为什么我的代码没有这样做呢?
非常感谢:)

vkc1a9a2

vkc1a9a21#

我倾向于只隐藏字段。

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

等等

zzzyeukh

zzzyeukh2#

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

4xrmg8kj

4xrmg8kj3#

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

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

yiytaume4#

要实际删除自动生成的列,必须关闭数据绑定后的自动生成。
所以代码应该是:

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变得可见的那一刻,丢失的列被重新自动生成。
因此,使用此解决方案,您可以在绑定数据时生成列,然后将其关闭并删除不需要的列。丢失的列无法重新生成。

vcudknz3

vcudknz35#

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;
        }
h79rfbju

h79rfbju6#

我认为在将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;

这个方法对我很有效

qgelzfjb

qgelzfjb7#

旧帖子,但真实的的答案是[灵魂掠夺者]的答案。设置Visible = true不会删除它,只是隐藏它。所以dataGridView.Columns.Remove("columnToRemove");是正确的方法。

siv3szwd

siv3szwd8#

如果你想从DataGridView中删除的是你选择的列,那么这段代码适合你。
将此代码放在删除按钮中,并准备删除所选的列。

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

相关问题