數據綁定表達式語法(Eval,Bind區別)
使用數據綁定語法,可以將控件屬性值綁定到數據,並指定值以對數據進行檢索、更新、刪除和插入操作。
數據綁定語法
數據綁定表達式包含在 <%# 和 %> 分隔符之內,並使用 Eval 和 Bind 函數。Eval 函數用於定義單向(只讀)綁定。Bind 函數用於定義雙向(可更新)綁定。除了通過在數據綁定表達式中調用 Eval 和 Bind 方法執行數據綁定外,還可以調用 <%# 和 %> 分隔符之內的任何公共範圍代碼,以在頁面處理過程中執行該代碼並返回一個值。
調用控件或 Page 類的 DataBind 方法時,會對數據綁定表達式進行解析。對於有些控件,如 GridView、DetailsView 和 FormView 控件,會在控件的 PreRender 事件期間自動解析數據綁定表達式,不需要顯式調用 DataBind 方法。
下面的代碼示例演示如何將數據綁定表達式與 ItemTemplate 中的 FormView 控件結合使用。
使用 Eval 方法
Eval 方法可計算數據綁定控件(如 GridView、DetailsView 和 FormView 控件)的模板中的後期綁定數據表達式。在運行時,Eval 方法調用 DataBinder 對象的 Eval 方法,同時引用命名容器的當前數據項。命名容器通常是包含完整記錄的數據綁定控件的最小組成部分,如 GridView 控件中的一行。因此,只能對數據綁定控件的模板內的綁定使用 Eval 方法。
Eval 方法以數據字段的名稱作爲參數,從數據源的當前記錄返回一個包含該字段值的字符串。可以提供第二個參數來指定返回字符串的格式,該參數爲可選參數。字符串格式參數使用爲 String 類的 Format 方法定義的語法。
使用 Bind 方法
Bind 方法與 Eval 方法有一些相似之處,但也存在很大的差異。雖然可以像使用 Eval 方法一樣使用 Bind 方法來檢索數據綁定字段的值,但當數據可以被修改時,還是要使用 Bind 方法。
在 ASP.NET 中,數據綁定控件(如 GridView、DetailsView 和 FormView 控件)可自動使用數據源控件的更新、刪除和插入操作。例如,如果已爲數據源控件定義了 SQL Select、Insert、Delete 和 Update 語句,則通過使用 GridView、DetailsView 或 FormView 控件模板中的 Bind 方法,就可以使控件從模板中的子控件中提取值,並將這些值傳遞給數據源控件。然後數據源控件將執行適當的數據庫命令。出於這個原因,在數據綁定控件的 EditItemTemplate 或 InsertItemTemplate 中要使用 Bind 函數。
Bind 方法通常與輸入控件一起使用,例如由編輯模式中的 GridView 行所呈現的 TextBox 控件。當數據綁定控件將這些輸入控件作爲自身呈現的一部分創建時,該方法便可提取輸入值。
Bind 方法採用數據字段的名稱作爲參數,從而與綁定屬性關聯,如下面的示例所示:
<EditItemTemplate> <table> <tr> <td align=right> <b>Employee ID:</b> </td> <td> <%# Eval("EmployeeID") %> </td> </tr> <tr> <td align=right> <b>First Name:</b> </td> <td> <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server" Text='<%# Bind("FirstName") %>' /> </td> </tr> <tr> <td align=right> <b>Last Name:</b> </td> <td> <asp:TextBox ID="EditLastNameTextBox" RunAt="Server" Text='<%# Bind("LastName") %>' /> </td> </tr> <tr> <td colspan="2"> <asp:LinkButton ID="UpdateButton" RunAt="server" Text="Update" CommandName="Update" /> <asp:LinkButton ID="CancelUpdateButton" RunAt="server" Text="Cancel" CommandName="Cancel" /> </td> </tr> </table> </EditItemTemplate>
單擊行的 Update 按鈕時,使用 Bind 語法綁定的每個控件屬性值都會被提取出來,並傳遞給數據源控件以執行更新操作。
顯式調用 DataBind 方法
有些控件,如 GridView、FormView 和 DetailsView 控件,當它們通過 DataSourceID 屬性綁定到數據源控件時,會通過隱式調用 DataBind 方法來執行綁定。但是,有些情況需要通過顯式調用 DataBind 方法來執行綁定。
其中一種情況就是使用 DataSource 屬性(而非 DataSourceID 屬性)將某個控件綁定到數據源控件時。在這種情況下,需要顯式調用 DataBind 方法,從而執行數據綁定和解析數據綁定表達式。
另一種情況就是需要手動刷新數據綁定控件中的數據時。假設有這樣一個頁面,其中有兩個控件,這兩個控件都顯示來自同一數據庫的信息(可能使用不同的視圖)。在這種情況下,可能需要顯式地將控件重新綁定到數據,以保持數據顯示的同步。例如,可能有一個顯示產品列表的 GridView 控件,和一個允許用戶編輯單個產品的 DetailsView 控件。雖然 GridView 和 DetailsView 控件所顯示的數據都來自同一數據源,但被綁定到不同的數據源控件,因爲這兩個控件使用不同的查詢來獲取其數據。用戶可能會使用 DetailsView 控件更新記錄,從而引發由關聯的數據源控件執行更新。但是,由於 GridView 控件被綁定到不同的數據源控件,所以,該控件仍將顯示舊的記錄值,直至頁面被刷新時纔會更新。因此,在 DetailsView 控件更新數據後,可以調用 DataBind 方法。這會使 GridView 控件更新其視圖,並重新執行任何數據綁定表達式以及 <%# 和 %> 分隔符之內的公共範圍代碼。這樣一來,GridView 控件將會反映 DetailsView 控件所做的更新。
詳情:http://msdn2.microsoft.com/zh-cn/library/ms178366(VS.80).aspx