У меня есть форма, которая содержит DataGridView, BindingSource, DataTable и SqlDataAdapter. Я заполняю сетку и привязки данных следующим образом:
private BindingSource bindingSource = new BindingSource();
private DataTable table = new DataTable();
private SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * FROM table ORDER BY id ASC;", ClassSql.SqlConn());
private void LoadData()
{
table.Clear();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = bindingSource;
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
dataAdapter.Fill(table);
bindingSource.DataSource = table;
}
Затем пользователь может вносить изменения в данные и фиксировать эти изменения или отменять их, нажимая соответственно кнопку сохранения или отмены.
private void btnSave_Click(object sender, EventArgs e)
{
// save everything to the displays table
dataAdapter.Update(table);
}
private void btnCancel_Click(object sender, EventArgs e)
{
// alert user if unsaved changes, otherwise close form
}
Я хотел бы добавить диалоговое окно, если нажата кнопка отмены, которое предупреждает пользователя о несохраненных изменениях, если существуют несохраненные изменения.
Вопрос:
Как определить, изменил ли пользователь данные в DataGridView, но не зафиксировал их в базе данных? Есть ли простой способ сравнить текущие данные DataGridView с последним полученным запросом? (Обратите внимание, что не было бы других потоков или пользователей, изменяющих данные в SQL в то же время.)