在validation文本框/复选框之前,文本框/复选框的数据绑定值不正确
我有一个winforms复选框,绑定到Entity Framework实体的属性。
因此,例如,我有一个绑定到属性IsSleeping
的checkboxSource.DataSource bindingSource.DataSource = myDog
,因此当用户选中该框时, IsSleeping
变为true,当用户取消选中该框时, IsSleeping
变为false。
这很好用。 问题是IsSleeping
的值在validation复选框之前不会更新,只有当焦点从复选框移到其他位置时才会发生。 因此,如果我想在取消选中该框时发生某些事情:
private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e) { OnDogPropertyChanged(myDog); MyAnimalEntities.SaveChanges(); }
myDog.IsSleeping
仍然是真的,直到稍后提出复选框的Validated
。 因此,当可怜的myNaughtyKitty
(正在听DogPropertyChanged
事件)来吃myDog
的食物菜时,想到myDog
正在睡觉, myDog
真的只是醒来! 不好了!
更糟糕的是 , MyAnimalEntities.SaveChanges()
还没有看到对myDog
的更改,因此IsSleeping
的值永远不会保存到数据库中。 将.SaveChanges()
调用移动到IsSleepingCheckbox_Validated
并不能解决这个问题,因为如果复选框被切换但是表单关闭而没有将焦点从复选框移开 , 则复选框永远不会被validation ,因此它的状态永远不会被保存!
我想这对于数据绑定和复选框/文本框来说一定是一个相当常见的问题,事实上我在网上找到了大量关于这个主题的post,但似乎没有人能够找到解决方案。 有没有人能够为此找到解决方法?
您可以将Binding.DataSourceUpdateMode属性更改为OnPropertyChanged (默认为OnValidation
),这将导致在用户单击复选框时更新数据源。 不幸的是,在更新数据源之前, CheckedChanged
事件仍然会触发。
要处理这个问题,您可以处理BindingSource.ListChanged事件并在那里移动SaveChanges
代码。
bindingSource = new BindingSource(); bindingSource.DataSource = myDog; checkBox1.DataBindings.Add(new Binding("Checked", bindingSource, "IsSleeping")); checkBox1.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; bindingSource.ListChanged += new ListChangedEventHandler(bindingSource_ListChanged);
HTH
这是使这项工作的适当方式。 处理CheckBoxvalidation事件
上述就是C#学习教程:在validation文本框/复选框之前,文本框/复选框的数据绑定值不正确分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
/// /// Handles Check Box State if Changed /// /// /// private void checkBoxBidSummaryItem_Validated(object sender, EventArgs e) { // Code to execute... _MyEntity.Save(_businessObject.SelectedBid); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1000537.html