数据绑定

最近失业在家,看些设计模式的书,在网上看到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 方法时数据绑定。
  • 代码下载
    代码下载

你可能感兴趣的:(数据绑定)