数据绑定

最近失业在家,看些设计模式的书,在网上看到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") %>两种语法分别进行数据绑定。
  • <%# %>数据绑定

    • 语法:
      <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 方法时数据绑定。
  • 代码下载
    代码下载

posted on 2007-05-10 12:46  李-辉  阅读(1407)  评论(0)    收藏  举报

导航