資料繫結運算式包含在 <%# 和 %> 分隔字元之內,並使用 Eval 和 Bind 函數。Eval 函數用於定義單向(唯讀)綁定。Bind 函數用於定義雙向(可更新)綁定。除了通過在資料繫結運算式中調用 Eval 和 Bind 方法執行資料繫結外,還可以調用 <%# 和 %> 分隔字元之內的任何公用範圍代碼,以在頁面處理過程中執行該代碼並返回一個值。
調用控制項或 Page 類的 DataBind 方法時,會對資料繫結運算式進行解析。對於有些控制項,如 GridView、DetailsView 和 FormView 控制項,會在控制項的 PreRender 事件期間自動解析資料繫結運算式,不需要顯式調用 DataBind 方法
在ASP.NET 中資料繫結有兩種類型:單值綁定和多值綁定
二者的共同點:都不需要和ADO.NET同時工作
不同點: 單值綁定可以把一個變數,一個屬性或者一個運算式動態插入到一個頁面中,可以用來協助建立資料控制項的模版。
多值綁定可以顯示一個表的所用內容需要支援他的特殊控制項(包含DataSource屬性)
單值綁定:
常用的四種運算式:
| 代碼如下 |
複製代碼 |
<%=XX%>, 內聯方式 ,可以引用C#代碼
<asp:FormView ID="FormView1"
DataSourceID="SqlDataSource1"
DataKeyNames="ProductID"
RunAt="server">
<ItemTemplate>
<table>
<tr><td align=right><B>Product ID:</B></td> <td><%# Eval("ProductID") %></td></tr>
<tr><td align=right><B>Product Name:</B></td> <td><%# Eval("ProductName") %></td></tr>
<tr><td align=right><B>Category ID:</B></td> <td><%# Eval("CategoryID") %></td></tr>
<tr><td align=right><B>Quantity Per Unit:</B></td><td><%# Eval("QuantityPerUnit") %></td></tr>
<tr><td align=right><B>Unit Price:</B></td> <td><%# Eval("UnitPrice") %></td></tr>
</table>
</ItemTemplate>
</asp:FormView> |
<%#XXX%>, 引用.cs 檔案中的代碼欄位
我已添加了擴充方法版本。喜歡擴充方法這種空降兵的感覺。
現在只要添加一個static的協助類,名字隨你喜歡
| 代碼如下 |
複製代碼 |
|
public static class Helper
{
static object ExpHelper<TEntity, TResult>(Page page, Func<TEntity, TResult> func)
{
var itm = page.GetDataItem();
return func((TEntity)itm);
}
public static object Eval<T>(this Page page, Func<T, object> func)
{
return ExpHelper<T, object>(page, func);
}
} |
在頁面中就可以
| 代碼如下 |
複製代碼 |
| <%#this.Eval<Student>(_ => _.Name + "(" + _.Age + ")")%> |
<%# Eval(xxx)%> ,需要綁定資料來源
Eval 方法可計算資料繫結控制項(如 GridView、DetailsView 和 FormView 控制項)的模板中的後期綁定日期運算式。在運行時,Eval 方法調用 DataBinder 對象的 Eval 方法,同時引用命名容器的當前資料項目。命名容器通常是包含完整記錄的資料繫結控制項的最小組成部分,如 GridView 控制項中的一行。因此,只能對資料繫結控制項的模板內的綁定使用 Eval 方法。
下面的控制項是支援資料繫結的清單控制項:
asp:RadioButtonList
asp:CheckBoxList
asp:DropDownList
asp:Listbox
通常在一個或多個 asp:ListItem 控制項中定義以上每個控制項中的可選項目,類似這樣:
| 代碼如下 |
複製代碼 |
|
<html>
<body>
<form runat="server">
<asp:RadioButtonList id="countrylist" runat="server">
<asp:ListItem value="C" text="China" />
<asp:ListItem value="S" text="Sweden" />
<asp:ListItem value="F" text="France" />
<asp:ListItem value="I" text="Italy" />
</asp:RadioButtonList>
</form>
</body>
</html> |