处理 DataGridView 中的并发异常
Handling concurrency exceptions in DataGridView
This article here描述了并发异常的处理。重现问题的步骤是:
- 创建一个新的 Windows 应用程序项目。
- 根据 Northwind 客户创建新数据集 table。
- 创建一个带有 DataGridView 的表单来显示数据。
- 用 Northwind 数据库中客户 table 的数据填充数据集。
- 填充数据集后,使用 Visual Studio 中的可视化数据库工具直接访问客户数据 table 并更改记录。
- 然后在表单上,将相同的记录更改为不同的值,更新数据集,并尝试将更改写入数据库,这会导致出现并发错误。
- 捕获错误,然后显示不同版本的记录,让用户决定是继续更新数据库,还是取消更新。
我的问题是,为什么会发生这种情况?为什么我不能只从 DataGridView 保存和编辑记录而不会导致任何错误?我正在创建一个带有 DataGridView 的应用程序,但我遇到了这个问题。我需要一些方法来避免或解决此错误而不通知用户,因此无论他们在 DataGridView 中看到什么,都会完全按照您看到的方式保存。该错误的原因是什么?
事实证明解决方案非常简单。
您需要做的就是在每次保存后将数据重新加载到 DataGridView 中。
所以 BindingNavigator 保存按钮的代码现在是:
this.Validate();
this.maintableBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.yourDataSet);
this.maintableTableAdapter.Fill(this.yourDataSet.yourtable);
我不知道为什么会这样,所以我需要专家来确认这一点。虽然可行的解决方案。
感谢 E-Bat 将这个想法植入我的脑海。
This article here描述了并发异常的处理。重现问题的步骤是:
- 创建一个新的 Windows 应用程序项目。
- 根据 Northwind 客户创建新数据集 table。
- 创建一个带有 DataGridView 的表单来显示数据。
- 用 Northwind 数据库中客户 table 的数据填充数据集。
- 填充数据集后,使用 Visual Studio 中的可视化数据库工具直接访问客户数据 table 并更改记录。
- 然后在表单上,将相同的记录更改为不同的值,更新数据集,并尝试将更改写入数据库,这会导致出现并发错误。
- 捕获错误,然后显示不同版本的记录,让用户决定是继续更新数据库,还是取消更新。
我的问题是,为什么会发生这种情况?为什么我不能只从 DataGridView 保存和编辑记录而不会导致任何错误?我正在创建一个带有 DataGridView 的应用程序,但我遇到了这个问题。我需要一些方法来避免或解决此错误而不通知用户,因此无论他们在 DataGridView 中看到什么,都会完全按照您看到的方式保存。该错误的原因是什么?
事实证明解决方案非常简单。
您需要做的就是在每次保存后将数据重新加载到 DataGridView 中。
所以 BindingNavigator 保存按钮的代码现在是:
this.Validate();
this.maintableBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.yourDataSet);
this.maintableTableAdapter.Fill(this.yourDataSet.yourtable);
我不知道为什么会这样,所以我需要专家来确认这一点。虽然可行的解决方案。
感谢 E-Bat 将这个想法植入我的脑海。