处理 DataGridView 中的并发异常

Handling concurrency exceptions in DataGridView

This article here描述了并发异常的处理。重现问题的步骤是:

  1. 创建一个新的 Windows 应用程序项目。
  2. 根据 Northwind 客户创建新数据集 table。
  3. 创建一个带有 DataGridView 的表单来显示数据。
  4. 用 Northwind 数据库中客户 table 的数据填充数据集。
  5. 填充数据集后,使用 Visual Studio 中的可视化数据库工具直接访问客户数据 table 并更改记录。
  6. 然后在表单上,​​将相同的记录更改为不同的值,更新数据集,并尝试将更改写入数据库,这会导致出现并发错误。
  7. 捕获错误,然后显示不同版本的记录,让用户决定是继续更新数据库,还是取消更新。

我的问题是,为什么会发生这种情况?为什么我不能只从 DataGridView 保存和编辑记录而不会导致任何错误?我正在创建一个带有 DataGridView 的应用程序,但我遇到了这个问题。我需要一些方法来避免或解决此错误而不通知用户,因此无论他们在 DataGridView 中看到什么,都会完全按照您看到的方式保存。该错误的原因是什么?

事实证明解决方案非常简单。

您需要做的就是在每次保存后将数据重新加载到 DataGridView 中。

所以 BindingNavigator 保存按钮的代码现在是:

this.Validate();
this.maintableBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.yourDataSet);
this.maintableTableAdapter.Fill(this.yourDataSet.yourtable);

我不知道为什么会这样,所以我需要专家来确认这一点。虽然可行的解决方案。

感谢 E-Bat 将这个想法植入我的脑海。