情况:
我正在VS2013中使用C#开发Winforms应用程序。
我有一个通过DataAdapter绑定到MySQL表的datagridview。每当用户从已编辑的行移至新行时,都会进行行验证和数据库更新。行验证在RowValidating中处理,而dataadapter更新在RowValidated中处理。
问题:
如果RowValidating中发生验证错误,那么我可以使用Cancel = true停止更新并将行保持错误状态作为当前选择。但是,在更新数据库时(例如,在数据库约束或并发阻止更新的情况下)验证也会失败。我可以捕获它们,但是,正如我现在在RowValidated中一样,Cancel = true不再可用。结果,我最终将旧行标记为错误,但是选择已移至新行。
题:
有什么方法可以放弃进一步的处理,尤其是一旦事情进展到RowValidated中的Update时,就放弃到新的行?换句话说,在RowValidated中是否有一些Cancel = true的类似物?
最佳答案
在https://msdn.microsoft.com/en-us/library/ms229603.aspx找到了解决此问题的方法。
它说:
如果您在验证之后进行自定义验证
事件,它不会影响数据绑定。例如,如果您有
尝试取消数据绑定的Validated事件中的代码,
数据绑定仍然会发生。在这种情况下,执行验证
在Validated事件中,更改控件的数据源更新模式
属性(在(数据绑定)(高级)下)从OnValidation到Never,
并将Control.DataBindings [“”]。WriteValue()添加到您的
验证码。