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

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 68 ::
收藏到网摘: 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,特别是不需要对字符串进行格式化的时候。