Datagridview не обновляется/обновляется

У меня есть DataGridView из набора данных таблицы из БД. Когда я удаляю строку, она обновляется в базе данных, но не удаляется из GridView. Только когда я перезапустить приложение, оно удаляется из таблицы.

пожалуйста, помогите

5 ответов


Это очень простой процесс.

1.) Создайте источник привязки

2.) Установите источник данных для этого объекта в таблицу Dataset.

3.) Задайте источник данных для DatagridView в качестве объекта источника привязки.

Пример Кода:

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

теперь любые изменения, внесенные в DataTable, будут автоматически передаваться в ваш GridView.


вам нужно сбросить привязку на bindingsource.

bindingSource.ResetBindings(false);

надеюсь, это поможет вам?

Если вы показываете свою таблицу в dgv и для удаления чего-то из этой таблицы у вас есть кнопка в форме win. вы выбрали, скажем, ID и нажмите кнопку "Удалить" для удаления элемента из таблицы db. Вот этот код:

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

вы заметите здесь, что у меня есть MySQL db, но не беспокойтесь об этом.


Если база данных обновлена и вы хотите обновить DataGridView, вызовите это:

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

например: где имя вашей таблицы (например, клиенты) и имя вашей базы данных (например, MyDB).

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

вы должны вызывать эту функцию после каждого удаления (сетка повторной привязки).

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