Bind和Eval的区别详解(ZT)
生活随笔
收集整理的這篇文章主要介紹了
Bind和Eval的区别详解(ZT)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
eval()方法在運(yùn)行時(shí)使用反射執(zhí)行后期綁定計(jì)算,因此與標(biāo)準(zhǔn)的ASP.NET數(shù)據(jù)綁定方法bind相比,會(huì)導(dǎo)致性能明顯下降。它一般用在綁定時(shí)需要格式化字符串的情況下。多數(shù)情況盡量少用此方法
Eval?方法是靜態(tài)(只讀)方法,該方法采用數(shù)據(jù)字段的值作為參數(shù)并將其作為字符串返回。Bind?方法支持讀/寫(xiě)功能,可以檢索數(shù)據(jù)綁定控件的值并將任何更改提交回?cái)?shù)據(jù)庫(kù)。
使用?Eval?方法
Eval?方法可計(jì)算數(shù)據(jù)綁定控件(如?GridView、DetailsView?和?FormView?控件)的模板中的后期綁定數(shù)據(jù)表達(dá)式。在運(yùn)行時(shí),Eval?方法調(diào)用?DataBinder?對(duì)象的?Eval?方法,同時(shí)引用命名容器的當(dāng)前數(shù)據(jù)項(xiàng)。命名容器通常是包含完整記錄的數(shù)據(jù)綁定控件的最小組成部分,如?GridView?控件中的一行。因此,只能對(duì)數(shù)據(jù)綁定控件的模板內(nèi)的綁定使用?Eval?方法。
Eval?方法以數(shù)據(jù)字段的名稱作為參數(shù),從數(shù)據(jù)源的當(dāng)前記錄返回一個(gè)包含該字段值的字符串。可以提供第二個(gè)參數(shù)來(lái)指定返回字符串的格式,該參數(shù)為可選參數(shù)。字符串格式參數(shù)使用為?String?類的?Format?方法定義的語(yǔ)法。
使用?Bind?方法
Bind?方法與?Eval?方法有一些相似之處,但也存在很大的差異。雖然可以像使用?Eval?方法一樣使用?Bind?方法來(lái)檢索數(shù)據(jù)綁定字段的值,但當(dāng)數(shù)據(jù)可以被修改時(shí),還是要使用?Bind?方法。?
在?ASP.NET?中,數(shù)據(jù)綁定控件(如?GridView、DetailsView?和?FormView?控件)可自動(dòng)使用數(shù)據(jù)源控件的更新、刪除和插入操作。例如,如果已為數(shù)據(jù)源控件定義了?SQL?Select、Insert、Delete?和?Update?語(yǔ)句,則通過(guò)使用?GridView、DetailsView?或?FormView?控件模板中的?Bind?方法,就可以使控件從模板中的子控件中提取值,并將這些值傳遞給數(shù)據(jù)源控件。然后數(shù)據(jù)源控件將執(zhí)行適當(dāng)?shù)臄?shù)據(jù)庫(kù)命令。出于這個(gè)原因,在數(shù)據(jù)綁定控件的?EditItemTemplate?或?InsertItemTemplate?中要使用?Bind?函數(shù)。
Bind?方法通常與輸入控件一起使用,例如由編輯模式中的?GridView?行所呈現(xiàn)的?TextBox?控件。當(dāng)數(shù)據(jù)綁定控件將這些輸入控件作為自身呈現(xiàn)的一部分創(chuàng)建時(shí),該方法便可提取輸入值。?
Bind?方法采用數(shù)據(jù)字段的名稱作為參數(shù),從而與綁定屬性關(guān)聯(lián),如下面的示例所示: <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?按鈕時(shí),使用?Bind?語(yǔ)法綁定的每個(gè)控件屬性值都會(huì)被提取出來(lái),并傳遞給數(shù)據(jù)源控件以執(zhí)行更新操作。
使用?DataBinder.Eval
ASP.NET?提供了一個(gè)名為?DataBinder.Eval?的靜態(tài)方法,該方法計(jì)算后期綁定的數(shù)據(jù)綁定表達(dá)式,并將結(jié)果格式化為字符串(可選)。利用此方法,可以避免許多在將值強(qiáng)制為所需數(shù)據(jù)類型時(shí)必須執(zhí)行的顯式強(qiáng)制轉(zhuǎn)換操作。
例如,在下面的代碼片段中,一個(gè)整數(shù)顯示為貨幣字符串。使用標(biāo)準(zhǔn)的?ASP.NET?數(shù)據(jù)綁定語(yǔ)法,必須首先強(qiáng)制轉(zhuǎn)換數(shù)據(jù)行的類型以便檢索數(shù)據(jù)字段?Integervalue。然后,這將作為參數(shù)傳遞到?String.Format?方法:?
<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["Integervalue"]) %>?
將此語(yǔ)法與?DataBinder.Eval?的語(yǔ)法進(jìn)行比較,后者只有三個(gè)參數(shù):數(shù)據(jù)項(xiàng)的命名容器、數(shù)據(jù)字段名稱和格式字符串。在模板化列表中(如?DataList?類、DataGrid?類或?Repeater?類),命名容器始終是?Container.DataItem。?
<%# DataBinder.Eval(Container.DataItem, "Integervalue", "{0:c}") %>
?
格式字符串參數(shù)是可選的。如果它被忽略,DataBinder.Eval?將返回類型對(duì)象的值,如下面的示例所示:
<%# (bool)DataBinder.Eval(Container.DataItem, "Boolvalue") %>?
當(dāng)對(duì)模板化列表中的控件進(jìn)行數(shù)據(jù)綁定時(shí),DataBinder.Eval?特別有用,因?yàn)閿?shù)據(jù)行和數(shù)據(jù)字段通常都必須強(qiáng)制轉(zhuǎn)換。
文章引用自:http://blog.nnsky.com/blog_view_178492.html?page=2
Eval?方法是靜態(tài)(只讀)方法,該方法采用數(shù)據(jù)字段的值作為參數(shù)并將其作為字符串返回。Bind?方法支持讀/寫(xiě)功能,可以檢索數(shù)據(jù)綁定控件的值并將任何更改提交回?cái)?shù)據(jù)庫(kù)。
使用?Eval?方法
Eval?方法可計(jì)算數(shù)據(jù)綁定控件(如?GridView、DetailsView?和?FormView?控件)的模板中的后期綁定數(shù)據(jù)表達(dá)式。在運(yùn)行時(shí),Eval?方法調(diào)用?DataBinder?對(duì)象的?Eval?方法,同時(shí)引用命名容器的當(dāng)前數(shù)據(jù)項(xiàng)。命名容器通常是包含完整記錄的數(shù)據(jù)綁定控件的最小組成部分,如?GridView?控件中的一行。因此,只能對(duì)數(shù)據(jù)綁定控件的模板內(nèi)的綁定使用?Eval?方法。
Eval?方法以數(shù)據(jù)字段的名稱作為參數(shù),從數(shù)據(jù)源的當(dāng)前記錄返回一個(gè)包含該字段值的字符串。可以提供第二個(gè)參數(shù)來(lái)指定返回字符串的格式,該參數(shù)為可選參數(shù)。字符串格式參數(shù)使用為?String?類的?Format?方法定義的語(yǔ)法。
使用?Bind?方法
Bind?方法與?Eval?方法有一些相似之處,但也存在很大的差異。雖然可以像使用?Eval?方法一樣使用?Bind?方法來(lái)檢索數(shù)據(jù)綁定字段的值,但當(dāng)數(shù)據(jù)可以被修改時(shí),還是要使用?Bind?方法。?
在?ASP.NET?中,數(shù)據(jù)綁定控件(如?GridView、DetailsView?和?FormView?控件)可自動(dòng)使用數(shù)據(jù)源控件的更新、刪除和插入操作。例如,如果已為數(shù)據(jù)源控件定義了?SQL?Select、Insert、Delete?和?Update?語(yǔ)句,則通過(guò)使用?GridView、DetailsView?或?FormView?控件模板中的?Bind?方法,就可以使控件從模板中的子控件中提取值,并將這些值傳遞給數(shù)據(jù)源控件。然后數(shù)據(jù)源控件將執(zhí)行適當(dāng)?shù)臄?shù)據(jù)庫(kù)命令。出于這個(gè)原因,在數(shù)據(jù)綁定控件的?EditItemTemplate?或?InsertItemTemplate?中要使用?Bind?函數(shù)。
Bind?方法通常與輸入控件一起使用,例如由編輯模式中的?GridView?行所呈現(xiàn)的?TextBox?控件。當(dāng)數(shù)據(jù)綁定控件將這些輸入控件作為自身呈現(xiàn)的一部分創(chuàng)建時(shí),該方法便可提取輸入值。?
Bind?方法采用數(shù)據(jù)字段的名稱作為參數(shù),從而與綁定屬性關(guān)聯(lián),如下面的示例所示: <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?按鈕時(shí),使用?Bind?語(yǔ)法綁定的每個(gè)控件屬性值都會(huì)被提取出來(lái),并傳遞給數(shù)據(jù)源控件以執(zhí)行更新操作。
使用?DataBinder.Eval
ASP.NET?提供了一個(gè)名為?DataBinder.Eval?的靜態(tài)方法,該方法計(jì)算后期綁定的數(shù)據(jù)綁定表達(dá)式,并將結(jié)果格式化為字符串(可選)。利用此方法,可以避免許多在將值強(qiáng)制為所需數(shù)據(jù)類型時(shí)必須執(zhí)行的顯式強(qiáng)制轉(zhuǎn)換操作。
例如,在下面的代碼片段中,一個(gè)整數(shù)顯示為貨幣字符串。使用標(biāo)準(zhǔn)的?ASP.NET?數(shù)據(jù)綁定語(yǔ)法,必須首先強(qiáng)制轉(zhuǎn)換數(shù)據(jù)行的類型以便檢索數(shù)據(jù)字段?Integervalue。然后,這將作為參數(shù)傳遞到?String.Format?方法:?
<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["Integervalue"]) %>?
將此語(yǔ)法與?DataBinder.Eval?的語(yǔ)法進(jìn)行比較,后者只有三個(gè)參數(shù):數(shù)據(jù)項(xiàng)的命名容器、數(shù)據(jù)字段名稱和格式字符串。在模板化列表中(如?DataList?類、DataGrid?類或?Repeater?類),命名容器始終是?Container.DataItem。?
<%# DataBinder.Eval(Container.DataItem, "Integervalue", "{0:c}") %>
?
格式字符串參數(shù)是可選的。如果它被忽略,DataBinder.Eval?將返回類型對(duì)象的值,如下面的示例所示:
<%# (bool)DataBinder.Eval(Container.DataItem, "Boolvalue") %>?
當(dāng)對(duì)模板化列表中的控件進(jìn)行數(shù)據(jù)綁定時(shí),DataBinder.Eval?特別有用,因?yàn)閿?shù)據(jù)行和數(shù)據(jù)字段通常都必須強(qiáng)制轉(zhuǎn)換。
文章引用自:http://blog.nnsky.com/blog_view_178492.html?page=2
轉(zhuǎn)載于:https://www.cnblogs.com/wbcms/archive/2007/12/27/1017448.html
總結(jié)
以上是生活随笔為你收集整理的Bind和Eval的区别详解(ZT)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 汽车展览的文化元素有哪些?
- 下一篇: 【转】心目中的编程高手