數據綁定表達式語法Eval和Bind

數據綁定表達式語法

使用數據綁定語法,可以將控件屬性值綁定到數據,並指定值以對數據進行檢索、更新、刪除和插入操作。

數據綁定語法

數據綁定表達式包含在 <%# %> 分隔符之內,並使用 Eval Bind 函數。Eval 函數用於定義單向(只讀)綁定。Bind 函數用於定義雙向(可更新)綁定。除了通過在數據綁定表達式中調用 Eval Bind 方法執行數據綁定外,還可以調用 <%# %> 分隔符之內的任何公共範圍代碼,以在頁面處理過程中執行該代碼並返回一個值。

調用控件或 Page 類的 DataBind 方法時,會對數據綁定表達式進行解析。對於有些控件,如 GridViewDetailsView FormView 控件,會在控件的 PreRender 事件期間自動解析數據綁定表達式,不需要顯式調用 DataBind 方法。

下面的代碼示例演示如何將數據綁定表達式與 ItemTemplate 中的 FormView 控件結合使用。

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>

 

使用 Eval 方法

Text='<%# Eval("字段") %>'
這樣的方法是最快的

Text='<%# GetPrice() %>'
也可以綁定方法,但方法要是public的

Text='<%# "CarDetails.aspx?CarID=" + DataBinder.Eval(Container.DataItem, "CarID") %>'
還可以連接多個字段

Eval 方法可計算數據綁定控件(如 GridViewDetailsView FormView 控件)的模板中的後期綁定數據表達式。在運行時,Eval 方法調用 DataBinder 對象的 Eval 方法,同時引用命名容器的當前數據項。命名容器通常是包含完整記錄的數據綁定控件的最小組成部分,如 GridView 控件中的一行。因此,只能對數據綁定控件的模板內的綁定使用 Eval 方法。

Eval 方法以數據字段的名稱作爲參數,從數據源的當前記錄返回一個包含該字段值的字符串。可以提供第二個參數來指定返回字符串的格式,該參數爲可選參數。字符串格式參數使用爲 String 類的 Format 方法定義的語法。

使用 Bind 方法

Bind 方法與 Eval 方法有一些相似之處,但也存在很大的差異。雖然可以像使用 Eval 方法一樣使用 Bind 方法來檢索數據綁定字段的值,但當數據可以被修改時,還是要使用 Bind 方法。

ASP.NET 中,數據綁定控件(如 GridViewDetailsView FormView 控件)可自動使用數據源控件的更新、刪除和插入操作。例如,如果已爲數據源控件定義了 SQL SelectInsertDelete Update 語句,則通過使用 GridViewDetailsView FormView 控件模板中的 Bind 方法,就可以使控件從模板中的子控件中提取值,並將這些值傳遞給數據源控件。然後數據源控件將執行適當的數據庫命令。出於這個原因,在數據綁定控件的 EditItemTemplate InsertItemTemplate 中要使用 Bind 函數。

Bind 方法通常與輸入控件一起使用,例如由編輯模式中的 GridView 行所呈現的 TextBox 控件。當數據綁定控件將這些輸入控件作爲自身呈現的一部分創建時,該方法便可提取輸入值。

Bind 方法採用數據字段的名稱作爲參數,從而與綁定屬性關聯,如下面的示例所示:

安全注意

該示例具有一個文本框,用於接受用戶輸入,這是一個潛在的安全威脅。默認情況下,ASP.NET 網頁驗證用戶輸入是否不包括腳本或 HTML 元素。有關更多信息,請參見腳本侵入概述

複製

<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" />

        &nbsp;

        <asp:LinkButton ID="CancelUpdateButton" RunAt="server"

          Text="Cancel" CommandName="Cancel" />

      </td>

    </tr>

  </table>

</EditItemTemplate>

單擊行的 Update 按鈕時,使用 Bind 語法綁定的每個控件屬性值都會被提取出來,並傳遞給數據源控件以執行更新操作。

顯式調用 DataBind 方法

有些控件,如 GridViewFormView DetailsView 控件,當它們通過 DataSourceID 屬性綁定到數據源控件時,會通過隱式調用 DataBind 方法來執行綁定。但是,有些情況需要通過顯式調用 DataBind 方法來執行綁定。

其中一種情況就是使用 DataSource 屬性(而非 DataSourceID 屬性)將某個控件綁定到數據源控件時。在這種情況下,需要顯式調用 DataBind 方法,從而執行數據綁定和解析數據綁定表達式。

另一種情況就是需要手動刷新數據綁定控件中的數據時。假設有這樣一個頁面,其中有兩個控件,這兩個控件都顯示來自同一數據庫的信息(可能使用不同的視圖)。在這種情況下,可能需要顯式地將控件重新綁定到數據,以保持數據顯示的同步。例如,可能有一個顯示產品列表的 GridView 控件,和一個允許用戶編輯單個產品的 DetailsView 控件。雖然 GridView DetailsView 控件所顯示的數據都來自同一數據源,但被綁定到不同的數據源控件,因爲這兩個控件使用不同的查詢來獲取其數據。用戶可能會使用 DetailsView 控件更新記錄,從而引發由關聯的數據源控件執行更新。但是,由於 GridView 控件被綁定到不同的數據源控件,所以,該控件仍將顯示舊的記錄值,直至頁面被刷新時纔會更新。因此,在 DetailsView 控件更新數據後,可以調用 DataBind 方法。這會使 GridView 控件更新其視圖,並重新執行任何數據綁定表達式以及 <%# %> 分隔符之內的公共範圍代碼。這樣一來,GridView 控件將會反映 DetailsView 控件所做的更新。

使用對查找表的綁定

一種有關數據綁定控件的常見方案是允許用戶使用 DropDownList 控件或其他列表控件從查找表中選擇一個值,以更新或插入該值。在這種情況下,將該查找控件綁定到返回可能值列表的單獨數據源,而將該查找控件的選定值綁定到父數據綁定行中的字段。

可以按照如下方法添加此功能。首先,對於查找控件,向數據綁定控件(例如 GridViewDetailsView FormView 控件)中的模板添加一個列表控件(DropDownList ListBox 控件)。接着將查找控件的 SelectedValue 屬性綁定到容器控件的數據源中的相關字段。其次,將查找控件的 DataSourceID 屬性設置爲可檢索查找值的數據源控件。接着將查找控件的 DataTextField 屬性設置爲查找表中包含要顯示的值的字段,並將其 DataValueField 屬性設置爲查找表中包含查找值的唯一標識符的字段(如果適用)。

下面的代碼示例演示一個 DropDownList 控件,此控件包括在 FormView 控件的 InsertItemTemplate 模板中(它也可以是包括在 DetailsView 控件的 Fields 屬性或 GridView 控件的 Columns 屬性中的 TemplateField InsertItemTemplate 模板)。DropDownList 控件的 SelectedValue 屬性使用 Bind 方法實現與 FormView 控件當前行的 CategoryID 字段之間的雙向綁定。將 DropDownList 控件的 DataSourceID 屬性設置爲單獨的數據源控件,用於檢索可能的類別名稱和 ID 列表。將 DropDownList 控件的 DataTextField 屬性設置爲查找數據源中的 CategoryName 字段,以便顯示可能的類別名稱列表。將 DropDownList 控件的 DataValueField 屬性設置爲查找數據源中相關類別名稱的 CategoryID 字段。當用戶從列表中選擇類別名稱時,DropDownList 控件的 SelectedValue 屬性將被設置爲選定類別名稱的類別 ID

C#

 

<tr>

 

  <td align="right"><b>Category:</b></td>

  <td><asp:DropDownList ID="InsertCategoryDropDownList"

                        SelectedValue='<%# Bind("CategoryID") %>'

                        DataSourceID="CategoriesDataSource"

                        DataTextField="CategoryName"

                        DataValueField="CategoryID"

                        RunAt="Server" />

  </td>

</tr>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章