天天看點

Bind和Eval的差別詳解

1.簡單描述Eval和Bind的差別

綁定表達式

<%# Eval("字段名") %>

<%# Bind("字段名") %>

差別 1.eval是隻讀資料,bind是可更新的.

        2.當對次表達式操作時候,必須用Eval 如<%# Eval("字段名").ToString().Trim() %>

        2.若GridView中綁定列裡面 設定 内容格式 DataFormateString ={0:d} ,則 必須把 屬性 HtmlCode 設定為false,否則無法 起作用;

        Eval 單向綁定:資料是隻讀的

        Bind 雙向綁定:資料可以更改,并傳回伺服器端,伺服器可以處理更改後的資料,如存入資料庫.

2、詳細介紹

eval()方法在運作時使用反射執行後期綁定計算,是以與标準的ASP.NET資料綁定方法bind相比,會導緻性能明顯下降。它一般用在綁定時需要格式化字元串的情況下。多數情況盡量少用此方法

Eval 方法是靜态(隻讀)方法,該方法采用資料字段的值作為參數并将其作為字元串傳回。Bind 方法支援讀/寫功能,可以檢索資料綁定控件的值并将任何更改送出回資料庫。

使用 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") %>

    </tr>

        <b>First Name:</b>

        <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"

          Text='<%# Bind("FirstName") %>' />

        <b>Last Name:</b>

        <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"

            Text='<%# Bind("LastName") %>'  />

      <td colspan="2">

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

          Text="Update" CommandName="Update" />

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

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

  </table>

</EditItemTemplate>

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

使用 DataBinder.Eval

ASP.NET 提供了一個名為 DataBinder.Eval 的靜态方法,該方法計算後期綁定的資料綁定表達式,并将結果格式化為字元串(可選)。利用此方法,可以避免許多在将值強制為所需資料類型時必須執行的顯式強制轉換操作。

例如,在下面的代碼片段中,一個整數顯示為貨币字元串。使用标準的 ASP.NET 資料綁定文法,必須首先強制轉換資料行的類型以便檢索資料字段 IntegerValue。然後,這将作為參數傳遞到 String.Format 方法:

<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>

将此文法與 DataBinder.Eval 的文法進行比較,後者隻有三個參數:資料項的命名容器、資料字段名稱和格式字元串。在模闆化清單中(如 DataList 類、DataGrid 類或 Repeater 類),命名容器始終是 Container.DataItem。

<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>

格式字元串參數是可選的。如果它被忽略,DataBinder.Eval 将傳回類型對象的值,如下面的示例所示:

<%# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>

當對模闆化清單中的控件進行資料綁定時,DataBinder.Eval 特别有用,因為資料行和資料字段通常都必須強制轉換。

3.其它

Eval:綁定的是隻讀資料的顯示;Bind:可以綁定隻讀資料也可以綁定更新資料,Bind方法還把字段和控件的綁定屬性聯系起來,使得資料控件(比如GridView等)的Update、Insert和Delete等方法可以使用這種聯系來作出相應的處理。

    Eval 和 Bind綁定的資料在<%# %> 顯示, 若對要顯示的資料作修改或者操作也在<%# %> 中,例如:

   1, 對顯示的字元串作字元顯示:<%# (Eval("Address")).ToString().SubString(0,10)%>,顯示10位數的位址。

   2, 對顯示的資訊作判斷:<%# (Eval("if_delete")).ToString == "yes" ?"已删除":"未删除"%>