Как показать DataGridView, обновленный после вставки или обновления

#c# #datagridview

#c# #datagridview

Вопрос:

Как сразу отобразить данные в виде таблицы данных, которые вставлены или обновлены. Я должен перезапустить проект, чтобы показать эти данные.Я использовал Update() И Refresh (), но у меня не работает

private void UpdateDebtbutton_Click(object sender, EventArgs e)
{
SqlConnection conn = ForConnection();
conn.Open();
using (conn)
{
if (paytextBox.Text != "")
{
SqlCommand cmd = new SqlCommand("spdebth", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@id", SqlDbType.Int).Value =customerIDTextBox.Text.ToString();
cmd.Parameters.Add("@text", SqlDbType.Int).Value = paytextBox.Text.ToString();
cmd.ExecuteNonQuery();
MessageBox.Show("Record updated");
spSelectAllCustomerDataGridView.Update();
spSelectAllCustomerDataGridView.Refresh();
conn.Close();
}
}
}

Комментарии:

1. Установите источник данных снова.

2. @Berkay Спасибо, дорогой, теперь он работает

3. используя DataTable DatatGridView, вы пробовали DataTable. AcceptChanges();

4. @JohnG я снова настроил источник данных, и теперь он работает, Спасибо, дорогой, за помощь

5. Рад, что это работает. Это пример того, какой способ лучше всего подходит для вас. Оба выполняют свою работу.

Ответ №1:

Refresh и Update методы используются не для обновления данных, а для перерисовки WinForms элемента управления.

Существует несколько способов отображения данных, обновленных в DataGridView:

  1. Используйте BindingList в качестве источника данных, но для этого требуется объект для реализации INotifyPropertyChanged
  2. Обновите строку DataGridView вручную
  3. Повторная привязка DataSource

Ниже приведен пример для третьего пункта:

 private void UpdateDebt(int customerId, int debt)
{
    var debts = (List<Debt>)spSelectAllCustomerDataGridView.DataSource;
    var item = debts.First(x => x.Id == customerId);
    item.Debt = debt;

    spSelectAllCustomerDataGridView.DataSource = null;
    spSelectAllCustomerDataGridView.DataSource = debts;
}
  

Вы должны выполнить повторную привязку DataGridView для отображения изменений.