如何使用WindowsForms单选按钮进行数据绑定?我的数据库中有一个二进制字段,很难在UI中用单个“是XXXX?”来描述它。型复选框。我宁愿有一对单选按钮(例如“DoittheFooway”和“DoittheBarway”),但现在我表单上的每个其他字段都是绑定到业务对象的数据。我想将一对单选按钮数据绑定到一个业务对象,但一直找不到好的方法。Icanbindoneofthebuttonstothefieldsothatifthebuttonisselected,thefieldissetto"true",butwhentheotherbuttonisselectedthefirstbuttonisdeselected(i.e.thetworadiobuttonsarepairedcorrectly)),此字段的值不会更新以反映这一点。我希望能够说button1.DataBindings.Add(newBinding("checked",source,"useFoo"));button2.DataBindings.Add(newBinding("checked",source,"!useFoo"));但我确信它会在运行时抛出。有没有更简单的方法,或者我应该更多地考虑如何单个复选框?我不想添加额外的功能来处理这个微不足道的事情……预计到达时间:一位评论者建议考虑使用下拉菜单(ComboBox)。我已经考虑过这个问题,但是我如何将它数据绑定到数据库/业务对象属性中的布尔字段?如果我将SelectedItem绑定到useFoo属性,Items集合中会包含什么?我是否必须添加“True”和“False”,或者我是否可以以某种方式添加一个键/值对对象,将显示的项目(“使用Foo”/“不使用Foo”)绑定到它后面的布尔值?我在查找有关此的文档时遇到问题。关于答案:我最终使用的解决方案涉及修改业务对象-基本思想与Gurge发布的非常相似,但我在阅读他的回复之前单独弄清楚了。简而言之,我添加了一个单独的属性,它只返回!useFoo。一个单选按钮绑定到source.UseFoo,另一个绑定到source.UseBar(新属性的名称)。确保新属性同时具有getter和setter很重要,否则您会得到非常奇怪的行为。我找到了一种使用DataSet/DataTable来执行此操作的方法。我使用表达式IIF(Foo=true,false,true)在DataTable中创建一个计算列。我们称之为酒吧酒吧。Bar是Boolean类型。现在您可以将一个radiobutton.checked绑定到Foo,将一个绑定到Bar。要选中/取消选中Bar以传播回Foo,您必须转到生成的DataTable代码并添加一行,即本例中的最后一行:[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]publicboolBar{get{尝试{return((bool)(this[this.tableradio.BarColumn]));}catch(global::System.InvalidCastExceptione){thrownewglobal::System.Data.StrongTypingException("Thevalueforcolumn'Bar'intable'radio'isDBNull.",e);}}设置{this[this.tableradio.BarColumn]=value;这个[this.tableradio.FooColumn]=!value;}}直接与你的boolean关联的RadioButton绑定(即检查值何时为真)。将事件处理程序添加到此RadioButton上的CheckedChanged事件,如下所示:如果您的业务对象实现了INotifyPropertyChanged(这使绑定工作得更好),您可以将以下代码添加到可视化界面,其中BO是您的业务对象并用事件声明,BO.Value是您要绑定到布尔属性的内容。PublicPropertyNotValue()AsBooleanGetReturnNotBO.ValueEndGetSet(ByValvalueAsBoolean)BO.Value=NotvalueRaiseEventPropertyChanged(Me,NewPropertyChangedEventArgs("NotValue"))结束设置结束属性PrivateSubBO_PropertyChanged(ByValsenderAsObject,ByValeAsSystem.ComponentModel.PropertyChangedEventArgs)HandlesBO.PropertyChangedIfe.PropertyName="Value"ThenRaiseEventPropertyChanged(Me,NewPropertyChangedEventArgs("NotValue"))EndIfEndSub以下绑定将连接收音机按钮。RBTrue.DataBindings.Add(NewBinding("Checked",Me.BO,"Value",False,DataSourceUpdateMode.OnPropertyChanged))RBFalse.DataBindings.Add(NewBinding("Checked",Me,"NotValue",False,DataSourceUpdateMode.OnPropertyChanged))可视化界面也应该实现INotifyPropertyChanged。这是双向的:如果界面发生变化,原始值将更新,如果原始值发生变化,界面将正确更新。我遇到了同样的问题,发现它实际上适用于标准数据绑定:button1.DataBindings.Add(newBinding("checked",source,"useFoo",false,DataSourceUpdateMode.OnPropertyChanged);//不需要数据绑定按钮2,因为button1.checked//在选中button2时设置为false默认情况下,DataSourceUpdateMode设置为OnValidation。通过将其设置为OnPropertyChanged,更改将立即传播到数据绑定对象。我的业务对象实现INotifyPropertyChanged;通过测试这个解决方案,我发现当我点击button2时,我的OnPropertyChanged事件被触发了两次。为了防止这种情况,只需设置button1.CausesValidation=false;button2.CausesValidation=false;如下所示:TextBoxleavingcausesPropertyChangedtobefiredtwiceincode.加载表单时,单选按钮根据数据库设置。当您按“保存”按钮时,存储状态,如您所愿。此示例将单选按钮存储在数据库中的一个位字段中。//加载无线电状态radioButton1.Checked=((myModel)myBindingSource.DataSource).boolOption1;radioButton2.Checked=((myModel)myBindingSource.DataSource).boolOption2;–//保存无线电状态((myModel)myBindingSource.DataSource)。boolOption1=radioButton1.Checked;((myModel)myBindingSource.DataSource).boolOption2=radioButton2.Checked;ItrytodragfromtheDataSourcespanelinVisualStudio2015whenIdefinetheradiobuttonasabooleaninthedesktoptoactivatetheitem,butwhenanotherradiobuttonisselected,thebooleanvalueisnotupdatedtofalse.在其他文本输入字段之间跳转时,将“causeValidation”更改为false会自动取消选中单选按钮。只需确保它们在同一组中,您只需绑定其中一个控件即可。也可以考虑DropDown。以上就是C#学习教程:HowtouseWindowsFormsradiobuttonsfordatabinding?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
