.net – 取消数据绑定控件验证事件不会抑制尝试更新数据源
我没有得到我希望绑定到业务对象中的整数属性的TextBox的行为.
这是我做的: (1)将TextBox的DataSourceUpdateMode设置为:OnValidation. (2)在TextBox的Validating事件中,如果Integer.TryParse失败,则设置e.Cancel = True. (3)向Binding.Parse和Binding.BindingComplete添加一个处理程序,并在处理程序中放置断点. 运行应用程序,将“asdasd”放在TextBox和tab中. 我搜索了MSDN,找出为什么会发生这种情况,但我找不到任何东西.有没有人知道我在哪里可以得到一些细节? ETA:我还为Validated事件添加了一个句柄.这是事件的顺序: 数据不好: (1)验证. (我设置e.Cancel = True) (2)解析 (3)BindingComplete 好数据: (1)验证 (2)解析 (3)BindingComplete (4)经过验证 ETA2:更多信息和解决方法. 此行为的问题是,如果您有一些未在属性设置器中实现的验证. 例如,假设我的整数属性必须是奇数.我没有在属性设置器中检查这个,所以我在验证事件中进行检查. 如您所见,从上面的行为来看,即使我取消验证,作为合法整数的值也将被写入数据源. 尽管数据源已更新,但如果您在验证事件中设置了“取消”,则不会触发Validated事件,因此您仍然可以阻止用户继续进行. 变通:: 要停止数据源更新,您需要在Binding.Parse事件中进行验证,并抛出异常 – 这会阻止Binding成功完成.
添加对CancelEdit的调用似乎有所不同.
private void textBox1_Validating(object sender,CancelEventArgs e) { bindingSource1.CancelEdit(); e.Cancel = true; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |