当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET立即上手教程(8)

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET立即上手教程(8)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 69 ::
收藏到网摘: n/a

Asp.net引入了一种新的声明数据绑定的语法。这种极其灵活的语法允许开发者不仅绑定数据源,而且可以绑定简单的属性、集合、表达式、甚至是调用方法所返回的结果。下面的列表显示了这种新语法的一些例子:
简单属性

Customer: <%# custID %>

集合

Orders: <asp:ListBox id="List1" datasource='<%#

myArray %>' runat="server">

表达式

Contact: <%# ( customer.First Name + " " + customer.LastName

   ) %>

方法结果

Outstanding Balance: <%# GetBalance(custID) %>

尽管这种语法看上去和asp中Response.Write的简写方式<%= %>很类似,但他们的运行机理却大不相同。Response.Write的简写语法在页面处理的时候求值,而asp.net数据绑定语法只有当调用DataBind方法的时候才求值。

DataBind是Page和所有服务器控件的一个方法。当你对一个父控件调用DataBind方法的时候,他所包含的子控件都会调用DataBind方法。比如执行DataList1.DataBind(),DataList模板中的所有控件都引用了DataBind方法。在Page调用DataBind方法--- Page.DataBind()或者简单的DataBind() ---导致页面上所有的数据绑定表达式都会被求值。DataBind经常在Page_Load事件中被调用,比如下面的例子:

protected void Page_Load(Object Src, EventArgs E) {
  DataBind();
}

你几乎可以在.aspx页面中声明部分的任何地方使用数据绑定表达式,在运行时提供它所计算的预期的数据类型。当求值以后,简单的属性、表达式以及上例中的方法,将向用户显示文本。在这些情况下,数据绑定表达式必须求出一个string类型的值。在集合的例子中,数据绑定表达式所求值的类型,对于ListBox的DataSource 属性来说是有效的。你会发现,在数据绑定表达式中为了得到期望的结果,强制转换结果值的类型,是很有必要的。例如,如果count是一个整数:

Number of Records: <%# count.ToString() %>

绑定简单属性

Asp.net数据绑定语法支持绑定页面的公共变量和属性,以及页面上其他控件的属性。

下面的例子说明了绑定到页面的公共变量和简单属性。注意这些值在调用DataBind()之前已被初始化。

绑定集合和列表

列表服务器控件,如DataGrid、 ListBox 和 HTMLSelect,使用集合作为数据源。下面的例子说明绑定到常用的CLR 集合类型。这些控件只能绑定到支持IEnumerable, ICollection, 或 IListSource 接口的集合。通常,您可以绑定到ArrayList、 Hashtable、 DataView 和DataReader.

很多时候,在绑定到页面或控制之前,你可能会操作这些数据。
 
DataBinder.Eval方法

Asp.net框架提供了一个静态方法DataBinder.Eval,可以计算后期数据绑定表达式的值,并可以将结果任意格式化为字符串。DataBinder.Eval是很方便的,他排除了许多开发人员必须作的(通过强制改变值的类型来得到预期的数据类型)显式转换。尤其是在带有模板列表的数据绑定控件中,因为经常需要显式转换数据行和数据字段,所以它特别有用。

仔细看下面的代码,整数将被显示为货币型字符串。使用标准的asp.net数据绑定语法,为了得到数据字段IntegerValue,你必须首先显式转换数据行的类型,然后作为String.Format方法的参数才能得到结果

<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>

这样的语法实在错综复杂的难以记忆。比较而言,DataBinder.Eval 就很简单了。它带有三个参数:数据项的命名容器、数据字段名称和格式化字符串。 在模板列表如DataList、DataGrid、或 Repeater,命名容器总是Container.DataItem。 Page 是另一个可以被DataBinder.Eval使用的命名容器。

<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>

格式化字符串参数是可选的。如果忽略参数,DataBinder.Eval 返回对象类型的值,就象下面的代码这样:

<%# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>

很重要的一点需要注意:由于受后期绑定影响,DataBinder.Eval与标准的数据绑定语法相比,在执行效率上有明显的差别。因此有选择地使用DataBinder.Eval,特别是不需要对字符串进行格式化的时候。