Spooks
Spooks

Reputation: 7177

Removing rows from dataGridView-using dataTable

I am trying to remove all the rows to reload them (I need to remove all rows) For some reason its not removing them from my datagridview (tho its not adding any extra either) nothing is happening. I have tried many different methods, I know I have done this in the past. (maybe because its end of the day)

Here is my code trying a whole bunch of removes

       private void loadMSXGridView()
    {
        BindingSource bs = new BindingSource();

        dgv.DataSource = null;
        dgv.Refresh();
        bs.DataSource = GetTable();
        dgv.DataSource = bs;
        dgv.Columns[0].Width = 391;
        dgv.Columns[1].Width = 30;
    }

        private DataTable GetTable()
        {
            DataTable t = new DataTable();
            t.Rows.Clear();
            t.AcceptChanges();

            t.Columns.Add("Accounting Line", typeof(string));
            t.Columns.Add("#", typeof(string));
            foreach (AMAPnr.RemarkElement re in AMAPnr._RemarkElements)
            {
                if (re.ElementID == "RM" && re.FreeFlow.StartsWith("*MS"))
                {
                    DataGridViewCell gridCellText;
                    DataGridViewCell gridCellElement;

                    gridCellText = new DataGridViewTextBoxCell();
                    gridCellText.Value = re.FreeFlow;

                    gridCellElement = new DataGridViewTextBoxCell();
                    gridCellElement.Value = re.ElementNo.ToString();

                    t.Rows.Add(gridCellText.Value, gridCellElement.Value);
                }
            }
            return t;
        }

My delete button calls loadMSXGridView, I only need to refresh everything because the items in my datagridview are associated to an element number, which won't remain the same

Upvotes: 2

Views: 4287

Answers (5)

Jürgen Steinblock
Jürgen Steinblock

Reputation: 31723

I would suggest to set the DataSource of your DataGridView to a BindingSource and change the DataSource of the BindingSource instead:

var table1 = GetDataTable();
var bindingSource1 = new BindingSource(table1, null);
dataGridView1.DataSource = bindingSource1;


// after reload
var table2 = GetDataTable();
bindingSource1.DataSource = table2;

that solves most problems, since you don't have to worry about how your data is bound.

Upvotes: 0

Darren Young
Darren Young

Reputation: 11090

If you simply just want to add a different datatable as the datasource, then do:

datagridview.DataSource = datatable;
datagridview.Invalidate();

That should work, as I have just done the exact same thing on a project i'm working on at the minute :)

Upvotes: 1

Spooks
Spooks

Reputation: 7177

My fault, everything worked after running a throughough debug I found The remarks elements were not being deleted, thus it was getting deleted by adding the same items back in. I remove the items from the RemarkElement section and it works, thanks for your help everyone!

Upvotes: 0

Payson Welch
Payson Welch

Reputation: 1428

In my limited data binding experience it is not easy to edit a data source. You should handle your data edits using one of the row binding or other events. However if you want to edit a datasource you basically have to clone the structure, then import the rows. So in this sense you should actually go back to your datasource and select exactly what you want.

However..

If you want to filter / edit your data here is how you can do it:

    DataSet ds1 = [Your Data Source]
DataSet ds2 = new DataSet();

ds2 = ds1.Clone();

for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
{
    if (ds1.Tables[0].Rows[i].ItemArray[0].ToString() != "SomeValue")
    {        
        ds2.Tables[0].ImportRow(ds1.Tables[0].Rows[i]);
    }
}
ds1 = ds2;

Upvotes: 1

Marc Gravell
Marc Gravell

Reputation: 1062530

Initially, you are data-binding:

dgv.DataSource = GetTable();

you should then continue data-binding; either tell the table to clear itself (and repopulate the data), or just assign a different data-table to dgv.DataSource.

Upvotes: 1

Related Questions