开发者

How can I clear rows in DataGridView with C#?

Following Error in this line.

datagridview1.Rows.Clear()

but this line gives error:

Cann开发者_JS百科ot clear this list.


I also had similiar problem when I try to clear DataSource of a DataGridView after I had binded it to a DataTable with:

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

when I try to clear it's rows later with the following code:

datagridview1.DataSource = null

I get this error:

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

This object reference ERROR problem already solved in here. But I managed to solve my own problem (clearing DataGridView rows) with this code:

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

I know that this question was asked a very long time ago, but I hope my solution would solve someone problems.


Is your DataGridView bound to a DataSource, i think thats why its not allowing you to clear it since its bound to an underlying DataTable or List.

you could try setting the DataSource Property to null

datagridview1.DataSource = null; for clearing


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


Simply add this line at beginning of your event:

dgv_nameOfGridView.DataSource=false;

Now every time you click it will erase the dgv..


You have to Clear datasource not datagridview rows.

datagridview1.DataSource = null;

Another way is

1) Dont assign direct datasource to gridview. add rows from datatable to 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);
        }

then use

datagridview1.Rows.Clear()


You can use this simple method:

First clear your DataTable and then refresh your DataGridView

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

Hope this help


Easy solution is to clear the DataSet. ds.Clear();


Since you are using a bound grid, have you tried to call your loading function twice and verified that the data is not doubling?

Since it is bound, loading twice ought to not duplicate the data.

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


First clear DataSource and then clear DataGridView

in VB

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

hope help


If you load your DataGridView with a parameter, you can send an empty parameter to it. This will clear your DataGridView without having to set its DataSet to null.

For example, I load my DataGridView with a Code, when I fill a TextBox.

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

If I want to clear its content, then

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


Here we are 8 years later.

Although

datagridview1.DataSource = null;

is a satisfactory answer for most, for me this removes all customizations I've added to the columns in design view. So hidden columns appears if I want to clear out the rows.

So rather than clear out rows:

datagridview1.Rows.Clear()

Clear out the DataTable or DataView that you used to set up the DataGridView. Note you don't have to check if something is null nor worry about Object not set to reference errors.

So here's how I did mine:

//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();
}

As you can see above, I just cleared out the datatable, and passed that into the datagrid. This kept all my properties I set on the datagridview column.


foreach (DataGridViewRow item in this.datagridview.Rows)
{
    datagridview.Rows.RemoveAt(item.Index);
}


I had the same problem I tried with many solutions.

In the end I realized that we can't clear the DataGridView if we use it's property "DGV.Datasource" because DGV takes its data from the dataset so you need to clear the DataTable rows

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

If you use this function in the Load of the Form you need to add a condition

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

or you will get this error

Object reference not set to an instance of an object.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜