【问题标题】:Remove Column from DataGridView从 DataGridView 中删除列
【发布时间】:2012-01-19 17:43:13
【问题描述】:

我有一个包含 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 列,为什么我的代码不这样做?

非常感谢:)

【问题讨论】:

  • 您是否尝试过隐藏它们:gvUsers.Columns["ID"].Visible = false?
  • 我发现 gvUsers.Columns.Remove("ID"); 有效.. 如果列名(不是标题/文本),但列名是 ID。

标签: c# winforms datagridview


【解决方案1】:

我倾向于只隐藏字段。

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

等等。

【讨论】:

  • 其实是gvUsers.Columns["ID"].Visible = false;
  • 为什么gvUsers.Columns["ID"].Visibility = false;(大概)对他有用,但gvUsers.Columns.Remove("ID");对他不起作用?
【解决方案2】:

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

【讨论】:

  • @War10ck 你能解释为什么它不能回答这个问题吗?在我看来,这更像是提问者询问如何删除列,而回答者给出了看起来会删除列的内容。在这种情况下,这比刚刚谈到可见性的接受答案更能回答它。那么这怎么回答不了问题呢?
【解决方案3】:

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

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

【讨论】:

  • 我希望它自动创建列,但删除我不需要的列。
【解决方案4】:

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

所以代码是:

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 变得可见的那一刻,丢失的列会重新自动生成。

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

【讨论】:

    【解决方案5】:
    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;
            }
    

    【讨论】:

      【解决方案6】:

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

      这个方法对我有用

      【讨论】:

        【解决方案7】:

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

        将此代码放在删除按钮中,并准备删除您选择的列。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-05
          相关资源
          最近更新 更多