【问题标题】:How can I clear rows in DataGridView with C#?如何使用 C# 清除 DataGridView 中的行?
【发布时间】:2011-05-31 07:40:31
【问题描述】:

此行出现以下错误。

datagridview1.Rows.Clear()

但是这一行给出了错误:

无法清除此列表。

【问题讨论】:

  • 在清除行以刷新网格后尝试调用datagridview1.bind();。只是猜测
  • DataGridView.Clear()的可能重复
  • ^^ 不可能重复,尝试过.. 但它给出了与该帖子中的内容不同的错误

标签: c# datagridview


【解决方案1】:

当我将 DataGridView 的 DataSource 绑定到 DataTable 后,我也遇到了类似的问题:

DataTable DT = ... ; // fill it
datagridview1.DataSource = DT;

当我稍后尝试使用以下代码清除它的行时:

datagridview1.DataSource = null

我收到此错误:

ERROR: Object reference not set to an instance of an object

此对象引用错误问题已在here 中解决。但我设法用这段代码解决了我自己的问题(清除 DataGridView 行):

DataTable DT = (DataTable)datagridview1.DataSource;
if (DT != null) 
    DT.Clear();

我知道这个问题是很久以前提出的,但我希望我的解决方案能解决某人的问题。

【讨论】:

  • 谢谢!即使有非常老的问题,新的答案可能对 OP 没有帮助,但它肯定会帮助像我这样的其他人。
  • 按预期工作,并且仍然保留了我的列定义。当用户单击重置按钮时,将此方法用于针对 DGV 的精炼结构。
  • 直到我的用户开始手动将数据输入到我的 datagridview 中,我才知道这个答案。然后我意识到我真正需要做的是在早期的初始化步骤中将我的 datagridview 数据源初始化为数据表,然后在我的代码中忘记它。我将我的 DataTable 设置为成员变量,并让绑定将所有内容保存在接收器中。简而言之,预先初始化所有内容。然后调用 .Clear();在您的数据表本身上。
  • 我添加了一个不涉及检查空值的解决方案
【解决方案2】:

您的DataGridView 是否绑定到DataSource,我认为这就是为什么它不允许您清除它,因为它绑定到底层DataTableList

您可以尝试将 DataSource 属性设置为 null

datagridview1.DataSource = null;用于清算

【讨论】:

  • 这也将清除 COlumns 定义,为您提供 DataGridView 的空壳。
  • 它不适合我。首先我设置DataSource = null; 然后他们使用dgv.Rows.Clear() 清除行。它没有工作
【解决方案3】:
private void button_Limpar_Click(object sender, EventArgs e)
{
    DataTable DT = (DataTable)dataGridView_Cidade.DataSource;
    if (DT != null)
        DT.Clear();
}
#endregion

【讨论】:

  • 重复以上@Aryo 的答案。
【解决方案4】:

只需在活动开始处添加这一行:

dgv_nameOfGridView.DataSource=false;

现在每次点击它都会清除 dgv..

【讨论】:

  • 这将清除所有行信息和列定义,留下一个 DGV 外壳,该外壳无法与预定义的列定义集绑定。
【解决方案5】:

您必须清除数据源而不是 datagridview 行。

datagridview1.DataSource = null;

另一种方法是

1) 不要将直接数据源分配给 gridview。 将数据表中的行添加到gridview

      foreach (DataRow row in dataTable.Rows)
        {
            var dataGridRow = new DataGridViewRow();
            dataGridRow.CreateCells(datagridview1);

            for (int i = 0; i < row.ItemArray.Length; i++)
            {
                dataGridRow.Cells[i].Value = row.ItemArray[i];
            }

            datagridview1.Rows.Add(dataGridRow);
        }

然后使用

datagridview1.Rows.Clear()

【讨论】:

    【解决方案6】:

    你可以使用这个简单的方法:

    首先清除您的 DataTable,然后刷新您的 DataGridView

    dataTable.Clear();
    dataGridView.Refresh();
    

    希望有帮助

    【讨论】:

    • 这对我有用,因为我的 DataTable 已绑定到数据集。
    【解决方案7】:

    简单的解决方案是清除 DataSet。 ds.Clear();

    【讨论】:

      【解决方案8】:

      由于您使用的是绑定网格,您是否尝试过调用您的加载 运行两次并验证数据没有加倍?

      既然是绑定的,加载两次应该不会重复数据。

      http://www.vbforums.com/showpost.php?s=aa5f116586c00a2d9ea15e3727fc5c2f&p=2841192&postcount=9

      【讨论】:

        【解决方案9】:

        先清除DataSource,再清除DataGridView

        在 VB 中

         datagridview1.DataSource = Nothing
         datagridview1.Rows.Clear()
        

        希望帮助

        【讨论】:

          【解决方案10】:

          如果您使用参数加载 DataGridView,则可以向其发送一个空参数。这将清除您的 DataGridView 而无需将其 DataSet 设置为 null。

          例如,当我填充 TextBox 时,我使用代码加载 DataGridView。

          this.dataTable1TableAdapter.Fill(this.ds_MyDataSet.DataTable1, TextBox1.Text);
          

          如果我想清除它的内容,那么

          this.dataTable1TableAdapter.Fill(this.ds_MyDataSet.DataTable1, "");
          

          【讨论】:

            【解决方案11】:

            8 年后我们在这里。

            虽然

            datagridview1.DataSource = null;
            

            对大多数人来说是一个令人满意的答案,对我来说,这会删除我在设计视图中添加到列中的所有自定义项。因此,如果我想清除行,就会出现隐藏列。

            所以与其清除行:

            datagridview1.Rows.Clear()
            

            清除用于设置 DataGridView 的 DataTable 或 DataView。请注意,您不必检查某些内容是否为 null,也不必担心 Object not set to reference 错误。

            这就是我的做法:

            //Populate the datagridview
            DataTable _DT = new DataTable();
            BindingSource _BS = new BindingSource();
            
            //Initially fill up your datatable with stuff
            //You can call this method again if data needed to be changed
            public void fillDT(int id) {
                _DT = fillUpDataTableWithStuffFromDB(id);
            
                _BS.DataSource = _DT.DefaultView;
                datagridview1.DataSource = _BS;
                _BS.ResetBindings(false);
            }
            
            //You can use this method to mimic the functionality above
            //But rather fetching data, just clear out the datatable and pass it in
            public void clearDT() {
                _DT.Clear();
                datagridview1.DataSource = _DT.DefaultView;
                datagridview1.Refresh();
            }
            

            正如您在上面看到的,我刚刚清除了数据表,并将其传递到数据网格中。这保留了我在 datagridview 列上设置的所有属性。

            【讨论】:

              【解决方案12】:
              foreach (DataGridViewRow item in this.datagridview.Rows)
              {
                  datagridview.Rows.RemoveAt(item.Index);
              }
              

              【讨论】:

                【解决方案13】:

                我尝试了许多解决方案时遇到了同样的问题。

                最后我意识到如果我们使用它的属性“DGV.Datasource”我们无法清除DataGridView,因为DGV从数据集中获取它的数据,所以你需要清除DataTable行

                Dataset.Tables["TableName"].Rows.Clear();
                

                如果在表单的加载中使用该功能需要添加条件

                if (DataSet.Tables["TableName"] !=null)    
                    Dataset.Tables["TableName"].Rows.Clear();
                

                否则你会得到这个错误

                对象引用未设置为对象的实例。

                【讨论】:

                • 使用这个条件 if (DataSet.Tables["TableName"] !=null) Dataset.Tables["TableName"].Rows.Clear();
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-04-03
                • 1970-01-01
                • 1970-01-01
                • 2021-10-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多