西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发C#.NET → c# 中多个RadioButton与DataTable的数据绑定出现问题的解决方案

c# 中多个RadioButton与DataTable的数据绑定出现问题的解决方案

相关软件相关文章发表评论 来源:西西整理时间:2012/11/22 17:29:22字体大小:A-A+

作者:西西点击:0次评论:0次标签: DataTable

  • 类型:SIM 模拟经营游戏大小:32.5M语言:中文 评分:7.2
  • 标签:
立即下载

Control类有一个公共的属性是DataBindings,它可以将控件的属性与其他的数据绑定在一起。我接触到的有将两个控件的数据绑定、将控件的属性与DataTable绑定。以下说说在将DataTable与RadioButton绑定的过程中出现的问题。

界面上有两个RadioButton,rdoA和rdoB,以及一个显示dt数据的Button;后台定义一个私有变量DataTable dt。界面初始化完成后,将rdo与dt的值绑定起来。

DataTable dt = null;
public DataBinding2()
{
    InitializeComponent();
    dt = new DataTable();
    dt.Columns.Add("A", typeof(bool));
    dt.Columns.Add("B", typeof(bool));
    dt.Rows.Add(rdoA.Checked, rdoB.Checked);

    rdoA.DataBindings.Add("Checked", dt, "A");
    rdoB.DataBindings.Add("Checked", dt, "B");
    btnDTValue.Click += (a, b) =>
        MessageBox.Show(string.Format("A: {0}\r\nB: {1}", dt.Rows[0]["A"], dt.Rows[0]["B"]));
}

到这里,完成思路需要的代码似乎敲完了,进入调试,看看结果。

没有点击任何RadioButton之前,查看dt的数据是正确的。

点击rdoA之后,再次查看dt的数据。

出现错误了。点击rdoA之后,rdoA的checked状态为true,这点没错,但是rdoA的状态会变成false,为什么绑定的dt里面B的值仍然是true呢??

我们可以仔细的研究Control.DataBindings.Add这个方法。

它有好几个扩展的方法,上面的示例中调用的是

public Binding Add(string propertyName, object dataSource, string dataMember)

查看它后台实际执行的是什么函数呢?

public Binding Add(string propertyName, object dataSource, string dataMember)
{
return this.Add(propertyName, dataSource, dataMember, false, this.DefaultDataSourceUpdateMode,
null, string.Empty, null);

继续追查this.DefaultDataSourceUpdateMode的选项。在微软的官方说明文字中可以看到这样一段

"DefaultDataSourceUpdateMode property is used in cases where a Binding without a DataSourceUpdateMode specified is added to the collection." data-guid="cd93d869019af3b363e4b864ab4b003f">在未指定 DataSourceUpdateMode 的 Binding 添加到集合中的情况下,将使用 DefaultDataSourceUpdateMode 属性。OnValidation" data-guid="db894ff4a6d833790928f507ee35a1de">对于 Windows 窗体控件,此默认值是 OnValidation"。

接下来的问题是,点击rdoA之后,是否会执行rdoB控件的OnValidation函数呢?于是在另一个项目里做了测试,(详细的测试方法可以看这里)两个radioButton,初始时,rdoA为true,rdoB为false。点击rdoB,会发现执行的事件包括:

1, rdoA, 事件:CheckedChanged
2, rdoB, 事件:CheckedChanged
3, rdoB, 事件:Validating
4, rdoB, 事件:Validated

由上面的结果可以看出,rdoA的验证事件并不会触发。也就是说rdoA此刻的Checked值并不会绑定到dt里面。

问题出在这里。找到问题之后修改起来就非常简单了。Add调用另一个重载的方法,输入DataSourceUpdateMode。

rdoA.DataBindings.Add("Checked", dt, "A", false, DataSourceUpdateMode.OnPropertyChanged);
rdoB.DataBindings.Add("Checked", dt, "B", false, DataSourceUpdateMode.OnPropertyChanged);

    农场类游戏
    (13)农场类游戏
    农场类游戏多是以农场为背景的模拟经营类游戏。游戏中,玩家扮演一个农场的经营者,完成从购买种子到耕种浇水施肥喷农药收获果实再到出售给市场的整个过程。游戏趣味性的模拟了作物的成长过程,所以玩家在经营农场的同时,也可以感受作物养成带来的乐趣。游戏中,玩家可以对自己的作物实施的大部分动作,都同样可以对好友的作物实施,所以在游戏中,玩家既可以成为一名乐善好施的大好人,也可以成为一名专搞破坏掠夺的大恶人,十分...更多>>
    • 卡通农场电脑版1.25.117

      07-08 / 48.8M

      推荐理由:卡通农场这款游戏你玩过了么》如果你喜欢玩模拟经营游戏的话,小编会向你推荐这款大作。话说西西自己也在玩
    • 奇幻农场(Fantastic Farm)绿色版

      11-12 / 71M

      推荐理由:奇幻农场(Fantastic Farm)是一款画风亲人,游戏性强的模拟经营游戏。主角是一个女魔法师,aggie刚刚从魔法学
    • 乔伊的农场绿色中文版

      12-26 / 42.94G

      推荐理由:比QQ农场更直观好玩的经营农场游戏,在游戏中,玩家要帮助Joy运转一片破落的田地,将它发展为年度最为繁荣的
    • (Farm Craft)农场工艺汉化版下载免

      07-15 / 32.5M

      推荐理由:现在QQ农场在中国真是流行啊, 其实国外人也在玩农场哦~~~ 而且他们玩的农场是画面更精美,内容更丰富
    • 魔法农场之终极花卉英文硬盘版

      04-12 / 28.8M

      推荐理由: “魔法农场”是一个温暖人心且有趣的故事,它讲述了花匠女孩和她可爱的小龙助手历尽千辛救援父母的的
    • 丰收农场英文硬盘版

      03-08 / 33.8M

      推荐理由:和农场游戏差不多,不过毕竟是单机游戏,画面非常的棒,希望大家能够喜欢 长青谷农场需要你的帮助!开发土

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)