【发布时间】:2015-08-22 21:40:55
【问题描述】:
情况:
我正在 VS2013 中使用 C# 开发一个 winforms 应用程序。
我有一个通过 DataAdapter 绑定到 MySQL 表的 datagridview。每当用户从已编辑的行点击到新的行时,就会发生行验证和数据库更新。行验证在 RowValidating 中处理,dataadapter.Update 在 RowValidated 中处理。
问题:
如果在 RowValidating 中发生验证错误,那么我可以使用 Cancel = true 来停止更新并将错误行保持为当前选择。然而,当数据库更新时验证也可能失败(例如,数据库约束或并发阻止更新)。我可以捕获这些,但由于我现在在 RowValidated 中,因此 Cancel = true 不再可用。结果,我最终将旧行标记为错误,但选择已移至新行。
问题:
有没有什么方法可以放弃进一步的处理,特别是一旦事情进展到 RowValidated 中的更新,就转移到新行?换句话说,在 RowValidated 中是否有一些 Cancel = true 的类似物?
【问题讨论】:
-
在实际行验证通过后将
dataadapter.Update移动到RowValidating事件处理程序。如果更新失败,设置Cancel = true那里 -
谢谢@Fabio。不幸的是,当在 RowValidating 中调用 dataadapter.Update 时,它什么也不做。我想在那个阶段它假设没有要提交的更改。
-
您在异常中捕获了更新失败?您可以存储之前的行号并将其重置在 catch..
-
@TaW 这就是我认为我最终不得不做的事情。不过似乎很不满意。整个 dgv“离开一行的更新”简直就是一场噩梦,当我以为它是 .Net 的面包和黄油的东西时。对于像 MS Access 这样不那么复杂的产品,这“可以正常工作”。
标签: c# winforms validation datagridview row