好记性不如烂笔头,生活、学习、工作、感悟,记于“笔下”,留于心间。任时光荏苒、世易时移,唯文字不改、记忆不散。

by:蚂蹄儿

初步探究C#里面的数据绑定(一)

分类:学无止境 - C#

关键词: c#  数据绑定  binding 

来源:蚂蹄儿(www.motyer.cn)

阅读:110发布时间:

  在程序开发中,数据绑定是一个非常有用的机制,它让我们省去了数据获取、数据修改、数据更新等一系列繁琐的操作。

  对于这样一个有用的机制,在WinForm程序开发中有其对应的实现吗?答案是肯定的。我们知道,在诸如TextBox、Label、ComboBox等控件中有一个DataBindings的属性,利用该属性我们可以很方便的将控件与数据源进行绑定。

  先看一个简单的例子:

this.txtAge.DataBindings.Add(new Binding("Text", this, "Time", true, 
    DataSourceUpdateMode.OnPropertyChanged, null, "g", new CultureInfo("zh-cn")));

  上述代码主要是将名为txtAge的一个文本框控件与该类中Time属性绑定起来。从例子可以看出,实现绑定的一个关键就是Binding类。下面探究Binding类的构造方法及其中各个参数是什么意思。

public Binding(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode, object nullValue, string formatString, IFormatProvider formatInfo);

  参数1(string propertyName):要绑定的控件属性的名称,如常用的控件的Text属性;

  参数2(object dataSource):要绑定的数据源对象;

  参数3(string dataMember):要绑定到的数据源中的属性或列表;

  参数4(bool formattingEnabled):指示是否启用格式化数据,启用之后,参数7和参数8的设置才能生效;

  参数5(DataSourceUpdateMode dataSourceUpdateMode):指定绑定控件中的属性发生更改后将数据更新到数据源的时机;

  参数6(object nullValue):当从数据源返回System.DBNull 时将属性设为指定值;

  参数7(string formatString):一个或多个格式说明符,指示如何显示值,如时间格式字符串“yyyy/MM/dd HH:mm”,数字格式字符串“E2”、"F2"之类的;

  参数8(IFormatProvider formatInfo):指定的格式提供程序,.net中大致有3个类实现了该接口(NumberFormatInfo、CultureInfo、DateTimeFormatInfo)。


  看概念很难弄懂它描述的是什么,下面以实际例子来说明。(假设例子下列中的输入均为合法输入

  例1:如下图,在一个窗体上,有2个可供输入的文本框(其Name分别为txtNum1和txtNum2),在这两个输入框中输入2个数字,按下相加按钮,将它们的和显示在第三个只读文本框中(其Name为txtResult)。

  对于这样一个简单的问题,我们完全可以这样做:输入数字1与数字2,在相加按钮的点击事件中获取txtName1与txtName2的值,将其转换为double类型然后相加,在把相加的结果赋给txtResult的Text属性,即可完成。

  但是,此处我们为了演示Binding的用法,将采用如下做法:

  ①新建一个名为Addition的类,作为数据绑定的数据源,如下:

public class Addition
{
	public double Num1 { get; set; }
	public double Num2 { get; set; }
	public double Result { get; set; }
}

  ②在Form1中创建一个Addition类型的字段,并将其与三个文本框绑定起来,既然要绑定,那么就会用到Binding类了,先以txtNum1这个文本框为例来说明如何确定Binding类的构造方法中的每个参数,如下:

// 前面提到,将数据源与文本框的Text属性绑定,所以第一个参数propertyName为Text
// 数据源为本类中类型为Addition的一个字段,所以第二个参数dataSource为_addition
// txtNum1文本框的值是于数据源里面的Num1属性绑定,所以第三个参数dataMember为Num1
Binding b1 = new Binding("Text", this._addition, "Num1");

  此时不需要对数据进行格式化的处理,故使用Binding类的最简单的3个参数的构造方法。txtNum2文本框和txtResult文本框与此同理,故省略说明。完整代码如下:

  ③给相加按钮添加事件:将_addition.Num1与_addition.Num2相加并把值赋给_addition.Result,完整代码如下:

public Form1()
{
	InitializeComponent();

	this._addition = new Addition();

	Binding b1 = new Binding("Text", this._addition, "Num1");
	Binding b2 = new Binding("Text", this._addition, "Num2");
	Binding bResult = new Binding("Text", this._addition, "Result");
	this.txtNum1.DataBindings.Add(b1);
	this.txtNum2.DataBindings.Add(b2);
	this.txtResult.DataBindings.Add(bResult);
}

private Addition _addition;

private void btnAdd_Click(object sender, EventArgs e)
{
	this._addition.Result = this._addition.Num1 + this._addition.Num2;
}

  至此,算是完成了绑定的初步准备。贪多嚼不烂,本篇文章就写到这里,剩下的内容将会后续思考提炼后补上。


  桌面软件定制、中小型网站建设、移动APP开发请添加QQ/微信:773347113。


上一篇:

下一篇: