热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

c#如何将RadioButton与DataTable数据进行绑定

我接触到的有将两个控件的数据绑定、将控件的属性与DataTable绑定,以下说说在将DataTable与RadioButton绑定的过程中出现的问题
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的选项。在微软的官方说明文字中可以看到这样一段
"在未指定 DataSourceUpdateMode 的 Binding 添加到集合中的情况下,将使用 DefaultDataSourceUpdateMode 属性。对于 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);
推荐阅读
  • 本文详细介绍了如何从SVN中获取项目,并在本地环境中进行有效的构建和开发,包括具体的步骤和配置方法。 ... [详细]
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • 本文详细探讨了函数与对象方法的主要区别,包括它们的定义方式、调用规则以及在面向对象编程语言中的应用特点。 ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
  • NFC OMA 接口访问优化
    本文探讨了NFC设备中OMA接口的访问方式,特别是针对IC制造商提供的NFC swp-sim访问与NFC服务提供商对eSe(嵌入式安全元件)访问的不同处理方法。文中提出了几种解决方案以解决由此产生的双SmartcardService运行问题。 ... [详细]
  • Linux环境下Redmine快速搭建指南
    本文将详细介绍如何在Linux操作系统中使用Bitnami Redmine安装包快速搭建Redmine项目管理平台,帮助读者轻松完成环境配置。 ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • Windows证照之星更换服装教程
    本文将详细介绍如何使用Windows证照之星软件更换照片中的服装,适合需要制作证件照的用户参考。方法简便易行,效果自然。 ... [详细]
  • 深入理解Java NIO:基础概念与原理
    本文介绍了Java NIO(New Input/Output)的基本概念,包括同步与异步、阻塞与非阻塞等核心理念,以及NIO相对于传统IO的优势和应用场景。通过详细解析这些概念,帮助读者更好地理解和掌握NIO的使用。 ... [详细]
  • 作为一名计算机科学专业的大三学生,我在过去的一年里自学了Visual Basic (VB),但感觉进展缓慢。VB的学习是否仅仅局限于控件的使用?如何有效地学习API?此外,有人认为Basic语言已经过时,这对VB的未来意味着什么? ... [详细]
  • 针对上一期关于 Windows 8 的问题,我们正在积极解决。本文提供 IE6,7,8 三个版本的单文件版下载,适用于 Windows Vista/7 系统,支持 x86 和 x64 架构。欢迎大家下载并分享。 ... [详细]
  • 本问题涉及对一个非负整数数组执行加一操作。数组以最高位数字在前的方式存储,每个数组元素仅包含一位数字。假设该整数没有前导零,除非该整数为0。 ... [详细]
  • 本文详细介绍了 Freemarker 模板引擎中的 include 指令,以及如何利用该指令从其他文件中引入内容,以增强页面的模块化和可维护性。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 本文详细介绍了ejabberd中的验证码服务、接收器以及服务器间通信的监督者和工作进程,包括它们的启动方式和主要功能。 ... [详细]
author-avatar
MwMw在不在_669_301_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有