数据绑定
最近失业在家,看些设计模式的书,在网上看到PetShop4,觉得很惊喜,想研究一下。写出来,一方面为了做笔记,另一方面希望就学习中遇到的问题能够拿出来和大家一起探讨。

PetShop4.0首页中的categories中使用了一个NavigationControl用户控件。用来生成Categories信息。
NavigationControl控件用来显示“Category”表中所有记录信息。NavigationControl控件的详细信息如下:
<asp:Repeater ID="repCategories" runat="server">
<HeaderTemplate>
<table cellspacing="0" border="0" style="border-collapse: collapse;">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="<%= ControlStyle %>"><asp:HyperLink runat="server" ID="lnkCategory" NavigateUrl='<%# string.Format("~/Products.aspx?page=0&categoryId={0}", Eval("Id")) %>' Text='<%# Eval("Name") %>' /><asp:HiddenField runat="server" ID="hidCategoryId" Value='<%# Eval("Id") %>' /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
首先想就数据绑定部分做一研究。PetShop使用了<%= ControlStyle %>和<%# Eval("Name") %>两种语法分别进行数据绑定。
PetShop4.0首页中的categories中使用了一个NavigationControl用户控件。用来生成Categories信息。
NavigationControl控件用来显示“Category”表中所有记录信息。NavigationControl控件的详细信息如下:













首先想就数据绑定部分做一研究。PetShop使用了<%= ControlStyle %>和<%# Eval("Name") %>两种语法分别进行数据绑定。
-
<%# %>数据绑定
- 语法:
<tagprefix:tagname property="<%# data-binding expression %>" runat="server" />
数据绑定表达式包含在 <%# 和 %> 分隔符之内,并使用 Eval 和 Bind 函数(Eval与Bind函数是Asp.net2.0是函数,在Asp.net1.1是DataBinder.Eval() )。Eval 函数用于定义单向(只读)绑定。Bind 函数用于定义双向(可更新)绑定。除了通过在数据绑定表达式中调用 Eval 和 Bind 方法执行数据绑定外,还可以调用 <%# 和 %>分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。 调用控件或 Page 类的 DataBind 方法时,会对数据绑定表达式进行解析。对于有些控件,如 GridView、DetailsView 和 FormView 控件,会在控件的 PreRender 事件期间自动解析数据绑定表达式,不需要显式调用 DataBind 方法。 - 绑定类型分类:
根据绑定数据的不同,数据绑定类型的分类有两种。一种是单值类型的数据绑定,一种是数据集类型的数据绑定。- 单值类型的数据绑定:可以使用任何表达式形式,只要该表达式返回一个可被使用的单值(可以是数组,姑且这样说了)即可,通常在<%# 和 %> 分隔符之内添加相应的表达式即可。
- 数据集类型的数据绑定:数据表或数据视图的引用。通常在<%# 和 %> 分隔符之内使用Eval 和 Bind 函数
- demo
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form id="form1" runat="server">
-------------------单值数据绑定--------------------------------<br />
<div>
属性:<%#PropertyStr%><br />
表达式:<%#PropertyStr + "和" + PropertyStr1%><br />
集合:<asp:DropDownList ID="DropDownList1" runat="server" DataSource='<%#arrayArr%>'>
</asp:DropDownList><br />
方法:<%#getFunction() %><br />
</div>
-------------------数据集数据绑定---------------------------------<br />
<div>
<asp:Repeater ID="repCategories" runat="server">
<HeaderTemplate>
<table border="1" >
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:HyperLink runat="server" ID="aa" NavigateUrl="#" Text='<%# Eval("Name") %>'></asp:HyperLink></td>
<td><asp:Label runat=server Text=<%#string.Format("{0:0.0}",Eval("Price")) %>></asp:Label></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
using System;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
private System.String propertyStr;
public String PropertyStr
{
get { return propertyStr; }
set { propertyStr = value; }
}
public String PropertyStr1;
public Char[] arrayArr;
protected void Page_Load(object sender, EventArgs e)
{
PropertyStr = "属性";
PropertyStr1 = "属性1";
arrayArr = new Char[5] { 'A', 'B', 'C', 'D', 'E' };
repCategories.DataSource = getTable();
// repCategories.DataBind();
Page.DataBind();
}
public String getFunction()
{
return "方法绑定";
}
public DataTable getTable()
{
DataRow myNewRow;
DataTable dataTable = new DataTable("TestTable");
DataColumn colID = new DataColumn("ID");
colID.DataType = System.Type.GetType("System.String");
dataTable.Columns.Add(colID);
DataColumn colName = new DataColumn("Name");
colName.DataType = System.Type.GetType("System.String");
dataTable.Columns.Add(colName);
DataColumn colPrice = new DataColumn("Price");
colPrice.DataType = System.Type.GetType("System.Double");
dataTable.Columns.Add(colPrice);
myNewRow = dataTable.NewRow();
myNewRow["ID"] = "11";
myNewRow["Name"] = "11";
myNewRow["Price"] = 1111.11;
dataTable.Rows.Add(myNewRow);
myNewRow = dataTable.NewRow();
myNewRow["ID"] = "22";
myNewRow["Name"] = "22";
myNewRow["Price"] = 2222.22;
dataTable.Rows.Add(myNewRow);
myNewRow = dataTable.NewRow();
myNewRow["ID"] = "33";
myNewRow["Name"] = "33";
myNewRow["Price"] = 3333.33;
dataTable.Rows.Add(myNewRow);
return dataTable;
}
}
- 语法:
- <%= %>数据绑定
<%= %>语法在处理页时数据绑定,而<%# %>语法仅在调用 DataBind 方法时数据绑定。 - 代码下载
代码下载