zoukankan      html  css  js  c++  java
  • 用DataBindings属性绑定控件的值

    WinForm中的很多控件,如Label、TextBox等都包含DataBindings属性,其类型为ControlBindingsCollection,是Binding类的集合。Binding类代表某对象属性值和某控件属性值之间的简单绑定。如可以将TextBox的Text属性值绑定到Label的Text属性值,这样,当TextBox中的文本被修改的时候,Label的文本也会及时进行修改,如下面的代码所示:

    label1.DataBindings.Add("Text", textBox1, "Text");
    Binding类除了可以将对象的属性绑定到控件的属性之外,还可以将对象列表中当前对象的属性值绑定到控件的属性。
    当使用Binding的构造函数创建实例时,必须指定三项内容:
    • 要绑定到的控件属性的名称
    • 数据源
    • 数据源中解析为列表或属性的导航路径
    其中,数据源可以为:
    • 实现 IBindingList 或 ITypedList 的任何类。包括:DataSet、DataTable、DataView 或 DataViewManager。
    • 实现 IList 的任意索引集合类。(必须在创建 Binding 之前创建和填充该集合,并且列表中的所有对象必须为同一类型,否则将引发异常)
    • 强类型对象的强类型 IList。

    导航路径可以为空字符串(默认将调用数据源的ToString()方法)、单个属性名称或用点分隔的名称层次结构。

    名称层次结构是什么意思呢?比如我们有一个Company类,它包含Name属性和Employees属性(公司所有Employee的集合),而Employee类又包含Name属性。那么,如果要将Company的Name属性绑定到TextBox控件的Text属性,代码为:

    TextBox1.DataBindings.Add("Text", company, "Name");

    如果要绑定Employees的Name属性,代码为:

    TextBox1.DataBindings.Add("Text", company, "Employees.Name");

    Employess.Name即为用点分隔的名称层次结构。在这里,Employees为一个集合,将Employees.Name绑定到TextBox会出现什么情况呢?测试后可知,TextBox将显示Employees集合中第一个Employee的Name属性。

    Binding类包含两个十分重要的事件:Format和Parse,可以创建自定义的格式来显示数据。具体可以参考MSDN。

    问题:如果将TextBox2的Text属性作为数据源绑定到TextBox1的Text属性,那么修改TextBox1的Text之后,将焦点移动到TextBox2上,其Text值就变为TextBox1的Text值了。这一点如何解决,我还没有找到比较好的方法,用Parse事件似乎也不行。希望各位朋友们指教。

  • 相关阅读:
    Serialize and Deserialize Binary Tree
    sliding window substring problem汇总贴
    10. Regular Expression Matching
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
    程序员如何写一份合格的简历?(附简历模版)
    9个提高代码运行效率的小技巧你知道几个?
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第六章 存储器层次结构
    24张图7000字详解计算机中的高速缓存
    《深入理解计算机系统》(CSAPP)实验四 —— Attack Lab
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
  • 原文地址:https://www.cnblogs.com/kirinboy/p/1384684.html
Copyright © 2011-2022 走看看