很久沒有做Web的項目了,很多事情都已經忘記了。最近介面上要用到很多的資料繫結,由於要求很是相似,所以就用Ctrl+V做了很多的事情,可惜結果出乎意料,沒有辦法只能好好的研究一下資料繫結的資料了,網上的資料還真的很多,大致整理了一下,以備後用。
說明:
<%@ %>表示:引用
<%# %>表示:必須放在繫結控制項中否則無效 //asp組件
<%= %>表示:可以訪問.cs檔案中的Public 和protected成員 //html組件
<% %>表示:裡面執行的是伺服器端的代碼
常用資料繫結方法列表:
<%#Bind("Subject") %> //讀寫綁定欄位
<%#Eval("[n]")%> //唯讀綁定欄位
<%#Container.DataItemIndex + 1%> //實現自動編號
<%#DataBinder.Eval(Container.DataItem, "[n]") %> //唯讀綁定欄位
TextBox.Text=’<%#UserName%>’ //控制項屬性綁定
datasource='<%#MyTable%>' //資料來源綁定
注意: Eval 方法是靜態(唯讀)方法,該方法採用資料欄位的值作為參數並將其作為字串返回
Bind方法支援讀/寫功能,可以檢索資料繫結控制項的值並將任何更改提交回資料庫。
ASP.NET (C#) Eval 和 Bind 的格式化
1.直接格式化
<%# DataBinder.Eval(Container.DataItem, "YourDateTime","{0:yyyy-MM-dd}") %>
<%# DataBinder.Eval(Container, "DataItem.YourDateTime","{0:yyyy-MM-dd}") %>
<%#Eval("YourDateTime","{0:yyyy-MM-dd}") %>
2.調用後台方法
<%# GetFormatStr(Eval("YourDataTime")) %>
3.String.Format()
<%#string.Format("{0:yyyy-MM-dd}",Eval("YourDataTime")) %>
備忘:
ASP.NET 2.0改善了模板中的資料繫結操作,把v1.x中的資料繫結文法DataBinder.Eval(Container.DataItem, fieldname)簡化為Eval(fieldname)。Eval方法與DataBinder.Eval一樣可以接受一個可選的格式化字串參數。縮短的Eval文法與DataBinder.Eval的不同點在於,Eval會根據最近的容器物件(例如DataListItem)的DataItem屬性來自動地解析欄位,而DataBinder.Eval需要使用參數來指定容器。由於這個原因,Eval只能在資料繫結控制項的模板中使用,而不能用於Page(頁面)層使用。
DataBinder是System.Web裡面的一個靜態類,它提供了Eval方法用於簡化資料繫結運算式的編寫,但是它使用的方式是通過Reflection等開銷比較大的方法來達到易用性,因此其效能並不是最好的。而Container則根本不是任何一個靜態對象或方法,它是ASP.NET頁面編譯器在資料繫結事件處理常式內部聲明的局部變數,其類型是可以進行資料繫結的控制項的資料容器類型(如在Repeater內部的資料繫結容器叫RepeaterItem),在這些容器類中基本都有DataItem屬性,因此你可以寫Container.DataItem,這個屬性返回的是你正在被繫結資料源中的那個資料項目。如果你的資料來源是DataTable,則這個資料項目的類型實際是DataRowView。可以這樣的使用:
前台頁面匯入名稱空間System.Data,否則會建置錯誤資訊: <%@ Importnamespace="System.Data" %>
<%#((System.Data.DataRowView)Container.DataItem)["欄位名"]%>
<%#((System.Data.DataRowView)Container.DataItem)[索引]%>
注意事項:
所有資料繫結運算式都必須包含在 <%# 和 %> 字元之間,而這個運算式說明的就是此代碼是用作伺服器端資料繫結用的。
在進行資料繫結的時候,如果你幫到到是控制項的Text屬性是,你必須寫成Control.Text=’ <%# UserName %>’
使用時注意:1.注意欄位名的大小寫(要特別注意)。如果和查詢的不一致,在某些情況下會導致比<%# DataBinder.Eval(Container.DataItem, "欄位名") %>還要慢。2.如果想進一步提高速度,可採用<%# ((System.Data.DataRowView)Container.DataItem)[0] %>的方法。不過其可讀性不高。
文章參考:
http://space.itpub.net/12639172/viewspace-481782
http://www.cnblogs.com/liuzijing688/archive/2008/03/27/1124623.html