user966614
user966614

Reputation: 191

Datagridview not updating/refreshing

I have a DataGridView made of a DataSet of a table from the DB. When I delete a row, it is updated in the database but it is not removed from the GridView. Only when I restart the application does it get removed from the GridView.

Please help

Upvotes: 12

Views: 50135

Answers (5)

Derek
Derek

Reputation: 8630

This is a very simple process.

1.) Create a Binding Source

2.) Set the Datasource for this object to your Dataset Table.

3.) Set The datasource for your DatagridView as the Binding source Object.

Code Example:

Dataset ds = new Dataset();
BindingSource bs = new BindingSource()
bs.Datasource = ds.Table[0];
DatagridView.Datasource = bs;

Now, Any changes you make in the DataTable will ripple through to your GridView automatically.

Upvotes: 11

user2689697
user2689697

Reputation:

If database is updated and you want to refresh DataGridView, call this:

this.<table name>TableAdapter.Fill(this.<DB name>DataSet.<table name>);

For example: Where is name of your table (for example Customers) and is name of your database (for example MyDB).

this.CustomersTableAdapter.Fill(this.MyDBDataSet.Customers);

Upvotes: 0

Sylca
Sylca

Reputation: 2545

Hope this helps you?

if you are showing your table in dgv and for deleting something from that table you have a button on your win form. you chose let's say ID and click "delete" button for delting an item from db table. Here is that code:

private void btn_Delete_Click(object sender, EventArgs e)
        {
            int selectedCellCount = dgv.GetCellCount(DataGridViewElementStates.Selected);

            if (selectedCellCount > 0)
            {
                string selection;

                for (int i = 0; i < selectedCellCount; i++)
                {
                    selection = dgv.SelectedCells[i].Value.ToString();
                    string qs_delete = "DELETE FROM yor_table WHERE id = '" + selection + "';";
                    try
                    {
                        conn = new MySqlConnection(cs);
                        conn.Open();

                        cmd = new MySqlCommand();
                        cmd.Connection = conn;
                        cmd.CommandText = qs_delete;
                        cmd.ExecuteNonQuery();

                        conn.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                        finally
                        {
                           if (conn != null) conn.Close();
                         }
                     }
                }    

//don't forget to load your table again in dgv
            string qs_select = "SELECT * FROM your_table";

            System.Data.DataTable dataTable = new System.Data.DataTable();
            dataTable.Clear();
            dgv.DataSource = dataTable;

            try
            {
                conn = new MySqlConnection(cs);
                cmd = new MySqlCommand(qs_select, conn);
                conn.Open();

                da = new MySqlDataAdapter(cmd);
                da.Fill(dataTable);

                cb = new MySqlCommandBuilder(da);

                dgv.DataSource = dataTable;
                dgv.DataMember = dataTable.TableName;
                dgv.AutoResizeColumns();

                conn.Close();
            }
            catch (Exception ex)
            {
                 MessageBox.Show(ex.Message);
            }
            finally
            {
                if (conn != null) conn.Close();
            }
         }

You'll notice here that i have MySQL db but don't bother yourself with that.

Upvotes: 0

helgeheldre
helgeheldre

Reputation: 1101

You need to reset the binding on your bindingsource.

bindingSource.ResetBindings(false);

Upvotes: 22

user1711092
user1711092

Reputation:

You have to call this function after every deletion(Re-bind Grid).

void BindGrid()
{
YourDataGridView.DataSource = dataset;
YourDataGridView.DataBind();
}

Upvotes: -5

Related Questions