c# - 如何使用 Windows 窗体单选按钮进行数据绑定(bind)?

标签 c# winforms data-binding radio-button

我的数据库中有一个二进制字段,很难在 UI 中使用单个“Is XXXX?”类型的复选框来描述。我宁愿使用一对单选按钮(例如“以 Foo 方式做”和“以 Bar 方式做”),但现在我表单上的所有其他字段都数据绑定(bind)到业务对象。我也想将一对单选按钮数据绑定(bind)到业务对象,但还没有想出一个好的方法来做到这一点。我可以将其中一个按钮绑定(bind)到该字段,这样如果选择了该按钮,该字段将设置为“true”,但是在选择另一个按钮时会取消选择第一个按钮(即,两个单选按钮已正确配对),该字段的值不会更新以反射(reflect)这一点。

我想说

button1.DataBindings.Add(new Binding("checked", source, "useFoo"));
button2.DataBindings.Add(new Binding("checked", source, "!useFoo"));

但我很确定它会在运行时抛出。有没有更简单的方法,或者我应该更多地考虑如何用一个复选框来表达?我不想添加额外的功能来处理这种微不足道的事情......

预计到达时间:一位评论者建议考虑使用下拉菜单 (ComboBox)。我曾考虑过这一点,但我如何将其数据绑定(bind)到数据库中的 bool 字段/业务对象中的属性?如果我将 SelectedItem 绑定(bind)到 useFoo 属性,Items 集合中会出现什么?我是否必须只添加“True”和“False”,或者我是否可以以某种方式添加一个键/值对对象,将显示的项目(“Use Foo”/“Do Not Use Foo”)与其背后的 bool 值联系起来?我找不到有关此的文档。


关于答案:我最终使用的解决方案涉及修改业务对象——基本思想与 Gurge 发布的非常相似,但我在阅读他的回复之前单独提出了它。简而言之,我添加了一个单独的属性,它只返回 !useFoo。一个单选按钮绑定(bind)到 source.UseFoo,另一个绑定(bind)到 source.UseBar(新属性的名称)。确保新属性同时具有 getter 和 setter 很重要,否则您最终会出现非常奇怪的行为。

最佳答案

  1. 绑定(bind)直接链接到您的 bool 值的 RadioButton(即当值为 true 时检查)。
  2. 向此 RadioButton 上的 CheckedChanged 事件添加事件处理程序,如下所示:

    private void radioButton_CheckedChanged(object sender, EventArgs e)
    {
        foreach (Binding b in ((Control)sender).DataBindings)
            b.WriteValue();
    }
    

关于c# - 如何使用 Windows 窗体单选按钮进行数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/344964/

相关文章:

.net - asp.net 中 DataBinding 的最佳实践以实现可维护性

c# - 使用 Windows 域帐户和应用程序管理的帐户

c# - 声明多个公共(public)变量

c# - 如何创建非模态形式但阻塞?

vb.net - 捕获应用程序崩溃事件

c# - 如何在 C# 中绘制二维等高线图?

c# - 是否可以将两个源属性绑定(bind)到一个控件属性?

c# - Entity Framework : How to insert data while looping through multiple lists

c# - 无法将 NULL 值插入自动增量主键列

c# - 样式设置的工具提示不起作用