ASP.NET页面的数据绑定
ASP.NET 引入了一种新的声明语法 <%# %>.该语法是在 .aspx 页中使用数据绑定的 基础.所有数据绑定表达式都必须包含在这些字符中.
A. 单值绑定<% # %>
公有或受保护的变量 <%# strName %>
方法结果: <%# getName()%>
表达式: <%# 1+ 3*20 %> <%# "tong" + "qing" %>
<%# Request.Browser.Browser%>
集合: <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
注:必须有父控件调用 DataBind()方法,如 Page.DataBind() 与 Control.DataBind() 调用 Page.DataBind 方法后,所有数据源都将绑定到它们的服务器控件.在显式调用 Web 服务器控件的 DataBind 方法或在调用页面级的 Page.DataBind 方法之前, 不会有任何数据 呈现给控件.通常,可以从 Page_Load 事件调用 Page.DataBind(或 DataBind) .
B. 重复值绑定
这些控件可以将其 DataSource 属性绑定到支持 IEnumerable,ICollection 或 IListSource 接口的任一集合.
1, 数据绑定列表控件 DropDownList 控件列表控件都公开 DataSource 和 DataMember 属性,这些属性用于 绑定到集合.
2,Repeater 控件 Repeater 控件是模板化的数据绑定列表.Repeater 控件是"无外观的" ;即,它不具 有任何内置布局或样式.因此,您必须在控件的模板中明确声明所有 HTML 布局标 记,格式标记和样式标记.
3,DataList 控件 DataList 类是一个多功能的, 模板化的数据绑定列表. 您可以通过修改模板来自定义此 控件.与 Repeater 控件不同,DataList 支持定向呈现,并且可以根据需要在运行时呈 现到 HTML 表中.
4,DataGrid 控件 DataGrid 控件是一个多功能的, 多列的数据绑定网格. 要自定义 DataGrid 中各列的布 局,您可以将列类型设置为"模板" ,然后修改列的模板.DataGrid 控件无需模板即可 进行呈现,这使得该控件成了用于报告方案的理想控件.DataGrid 还支持根据列和根 据按钮列进行选择,编辑,删除,分页和排序.
C. 数据源
1, DataSet 类(DataTable) DataSet 包含数据的完整表示形式,其中包括表结构,表之间的关系和数据的排序. DataSet 类非常灵活, 可以将数据库中任何种类的信息存储到扩展标记语言 (XML) 文件中.DataSet 类是无状态的;即,您无需连接到服务器连接资源即可将这些类 从客户端传递到服务器.
2, DataReader 类 如果您只需显示 (而不更改) 要呈现的数据, DataReader 类可能是更好的解决方法. 例如,对于 DropDownList 控件,最好使用 DataReader,因为 DataReader 是只进 数据游标.
3, Array,ArrayList,List 数组
D. 绑定表达式
<%# DataBinder.Eval(Container.DataItem, "ColumnName") %>
<%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
<%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
<%# ((DataRowView)Container.DataItem)["ColumnName"] %>
<%# ((DataRowView)Container.DataItem).Row["ColumnName"] %>
<%# Eval("ColumnName ") %>
注:关于 asp.net 2.0 中的 Eval 实现 Eval 在 Page 类中实现,其本质如
protected object Eval(string expression)
{
return DataBinder.Eval(GetDataItem(), expression);
}
protected object Eval(string expression, string format)
{
return DataBinder.Eval(GetDataItem(), expression, format);
}
1,第 4,5 种在使用 columnIndex 中无疑是最快的
2,第 4,5 种在使用列名大小写匹配时无疑也是最快的
3,当 4,5 种在使用列名大小写不匹配时,同第一种相比结果很微妙
4, 但是结论 3 这种比较是基于 DataRowView 对 DataBinder.Eval 调用的优化 (即 实现了 ICustomTypeDescriptor) 接口而言的,对于没有实现该接口的数据集合绑 定,如一个自定义的对象集合,无疑,4,5 两种的调用的模式还是推荐之列的