如何使用C#清除DataGridView中的行?

时间:2011-05-31 07:40:32

标签: c# datagridview

此行中出现错误。

datagridview1.Rows.Clear()

但这一行给出错误:

  

无法清除此列表。

13 个答案:

答案 0 :(得分:21)

当我尝试清除DataGridView的DataSource之后,我也遇到了类似的问题:我将它绑定到DataTable:

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

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

datagridview1.DataSource = null

我收到此错误:

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

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

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

我知道很久以前就问过这个问题,但我希望我的解决方案可以解决某些问题。

答案 1 :(得分:5)

private void button_Limpar_Click(object sender, EventArgs e)
{
    DataTable DT = (DataTable)dataGridView_Cidade.DataSource;
    if (DT != null)
        DT.Clear();
}
#endregion

答案 2 :(得分:4)

你的DataGridView是否绑定了DataSource,我认为这就是为什么它不允许你清除它,因为它绑定到基础DataTableList

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

datagridview1.DataSource = null;清算

答案 3 :(得分:3)

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

datagridview1.DataSource = null;

另一种方式是

1)不要将直接数据源分配给gridview。 从datatable添加行到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()

答案 4 :(得分:2)

只需在活动开始时添加此行:

dgv_nameOfGridView.DataSource=false;

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

答案 5 :(得分:2)

您可以使用这种简单的方法:

首先清除DataTable,然后刷新DataGridView

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

希望这个帮助

答案 6 :(得分:1)

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

答案 7 :(得分:0)

  

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

     

由于它是绑定的,因此加载两次不应该复制数据。

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

答案 8 :(得分:0)

首先清除DataSource,然后清除DataGridView

VB中的

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

希望帮助

答案 9 :(得分:0)

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

例如,当我填充TextBox时,我用Code加载DataGridView。

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

如果我想清除其内容,那么

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

答案 10 :(得分:0)

这是8年后的事情。

尽管

datagridview1.DataSource = null;

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

因此,而不是清除行:

datagridview1.Rows.Clear()

清除用于设置DataGridView的DataTable或DataView。请注意,您不必检查是否为空,也不必担心对象未设置为引用错误。

所以这是我的工作方式:

//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列上。

答案 11 :(得分:0)

import os, shutil
src="U:\User\Source"
src_files = os.listdir("U:\User\Source")
dest = "U:\User\Dest"
files = ['1010*', '1011*', '1015*'] #More values
for file_name in files:
    full_file_name = os.path.join(src, file_name)
    if os.path.isfile(full_file_name):
        shutil.copy(full_file_name, dest)

答案 12 :(得分:-1)

我遇到了与许多解决方案一样的问题。

最后,我意识到如果我们使用它的属性&#34; DGV.Datasource&#34;我们就无法清除DataGridView。因为DGV从数据集中获取数据,因此您需要清除DataTable行

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

如果您在表格的加载中使用此功能,则需要添加条件

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

或者你会收到此错误

  

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