财经热点 > 财经资讯 > 学习ASP.NET数据绑定
学习ASP.NET数据绑定
信息来源】   发布日期:5-8 10:30:00    文章分类:财经资讯   
专题:】 【

如果回到Visual Basic的时代,数据绑定(data binding)是一项被遗弃的笨拙编程技术。DAO过分简单和速度缓慢的控件让数据绑定得了个坏名声,许多有经验的开发人员压根就不是用它。当时很普遍的意见是:“真实的程序员不吃蛋奶饼,而他们肯定也不用数据绑定!”

可是有了.NET之后,许多东西都发生了改变,其中一个变化是在快速应用程序开发中用于数据源的绑定控件具有了高效率。其实,.NET让整个数据绑定的概念超越了原有简单地把控件附加到数据表格上的概念。这种能力对ASP.NET的开发人员尤其有用,因为这就更多地把他们同应用程序数据访问层的反复不定隔绝起来。

数据绑定101:DataSet 

用最容易的形式来看,数据绑定牵涉了将ASP.NET的Web控件,例如说ListBox,附加到包含一些数据库数据的DataSet上。ListBox.DataSource属性让你指定控件要绑定的DataSet,而DataBind方法会真正地用数据来填充控件。由于DataSet可以包含多个字段,所以带有单个数据列的控件(ListBox、DropDownList等等)都会公开DataTextField和DataKeyField属性,这样你就能够分别指定控件将要以文本形式显示的字段名或用于值的字段名。

Listing A包含了一个容易的案例,它将ListBox绑定到Northwind示例数据库的Categories表格上。在建立了DataSet之后,我用DataSource属性将它绑定到ListBox1。然后把DataTextField属性设置为CategoryName,后者是ListBox1应该显示的字段(它会被用作SelectedItem.Text),把DataKeyField属性设置为CategoryId,这样ListBox1就会把它用作键。(它会被返回为SelectedItem.Value.)。

数据绑定201:数组和集合

好,绑定到DataSet是小孩的伎俩。可是假如你所要的数据不在数据库里,那又会怎么样呢?假如你想让用户能够从对象数列里进行选择,那又会怎么样呢?当然,你能够手动建立包含有数据的DataSet,可是这有点像要盖一座大楼,而你所期望的实际上就是一个工具棚。假如你只需要直接绑定到数组上,这是不是会很好?

事实的确如此,你可以直接绑定到参照类型变量的数组,这正如Listing B。在本文里,我有一个类——DataClass,它公开了两个属性,Description和ID。我可以建立一个DataClass对象的数组,并将它绑定到ListBox1,这和我在Listing A里对DataSet所做的一样:把DataTextField设置为Description(描述),把DataKeyField设置为ID。

ASP.NET使用实时的Reflection API来检查数组里的对象并找到正确的属性,它然后会把它们载入到ListBox1的ListItemCollection里。要谨防,ASP.NET会专门去寻找property的成员——公共变量或函数方法在这里都不起作用。

Listing C说明集合同样能够很好的工作,这其实其实其实不会让你以外,因为我敢肯定到现在这个时候,你应该已经非常了解.NET是怎样使用IEnumerable and IEnumerator interfaces to iterate over collections的。假如你碰巧不晓得我在说什么,试着瞧瞧将ListBox1绑定到CollectionClass的Listing D,它通过实现Ienumerable和Ienumerator来获得类似集合的迭代能力。

数据绑定301:DataGrid

  对DataGrid和相关控件的数据绑定也是类似的,只不过你要处理的可能是控件里一个以上的列——不然,为啥要用DataGrid呢?DataGrid缺省的绑定行为相当智能:所有的列(在使用DataSet的情景下)或公共属性(在对其它对象的情景下)会被显示出来。所以只设置DataSource属性会给你一个函数数据绑定方格。

当然在有些情境下,你不想用DataGrid来为自己建立列。你可以取消缺省的列自动生成的表现,并把AutoGenerateColumns属性设置为伪(false),这样就能够控制DataGrid的列的生成和绑定。然后你就可以使用Visual Studio .NET 的列属性编辑器为格建立列,如图 A所示,或通过为DataGrid所应该包含的每个列建立一个System.Web.UI.WebControls.BoundColumn实例来实现这一点.

图A

Visual Studio .NET提供了一个卓越的列属性编辑器

Listing E重新编写了Listing C里集合绑定的案例,以此来操作DataGrid。我首先关闭了DataGrid1里列自动生成的特性,然后建立了一个新的BoundColumn对象。通过使用DataField属性,我把列对象绑定到DataClass的Description属性上,再把它添加到DataGrid1的列集合里。


结业典礼!

数据绑定不只是快速应用程序开发的一个重要方法,它还有助于将你数据结构的细节对应用程序的表示层隐藏起来。可是通过同样的机制来绑定数据库和对象数据,微软让在应用程序里使用数据绑定控件更加实用了。


 
 

 
 

 

手机扫码浏览该文章
 ● 相关资讯专题