1.簡單描述Eval和Bind的區別
|
綁定運算式
<%# Eval("欄位名") %>
<%# Bind("欄位名") %>
區別 1.eval是唯讀資料,bind是可更新的.
2.當對次運算式操作時候,必須用Eval 如<%# Eval("欄位名").ToString().Trim() %>
2.若GridView中繫結資料行裡面 設定 內容格式 DataFormateString ={0:d} ,則 必須把 屬性 HtmlCode 設定為false,否則無法 起作用;
對於程式員來說最根本的區別是:
1.Bind是可更新的,是Bind繫結資料行可編輯,並且可以和資料來源控制項互動,直接和資料庫互動,但是用Bind的話,程式端的自訂動作就不能用了,比如Convert,ToString()等,或自己寫的函數,在程式端都不可以
2.eval是唯讀資料,用eval的話不可以和資料來源控制項互動,是單向的,但是可以自訂動作
|
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") %>
</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繫結資料在<%# %> 顯示, 若對要顯示的資料作修改或者操作也在<%# %> 中,例如:
1, 對顯示的字串作字元顯示:<%# (Eval("Address")).ToString().SubString(0,10)%>,顯示10位元的地址。
2, 對顯示的資訊作判斷:<%# (Eval("if_delete")).ToString == "yes" ?"已刪除":"未刪除"%>