<%#eval() %>和<%#bind() %> 的區別

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


綁定表達式
<%# Eval("字段名") %>
<%# Bind("字段名") %>程序員


區別 1.eval是隻讀數據,bind是可更新的.數據庫

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

        2.若GridView中綁定列裏面 設置 內容格式 DataFormateString ={0:d} ,則 必須把 屬性 HtmlCode 設置爲false,不然沒法 起做用;post

    對於程序員來講最根本的區別是:
1.Bind是可更新的,是Bind綁定列可編輯,而且能夠和數據源控件交互,直接和數據庫交互,可是用Bind的話,程序端的自定義操做就不能用了,好比Convert,ToString()等,或本身寫的函數,在程序端都不能夠
2.eval是隻讀數據,用eval的話不能夠和數據源控件交互,是單向的,可是能夠自定義操做
性能


二、詳細介紹
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") %>
      </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 語法綁定的每一個控件屬性值都會被提取出來,並傳遞給數據源控件以執行更新操做。


使用 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綁定的數據在<%# %> 顯示, 若對要顯示的數據做修改或者操做也在<%# %> 中,例如:spa

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

   2, 對顯示的信息做判斷:<%# (Eval("if_delete")).ToString == "yes" ?"已刪除":"未刪除"%>server

相關文章
相關標籤/搜索