GridView 中 Bind和Eval的區別詳解
Eval 方法是靜態(只讀)方法,該方法採用資料欄位的值作為引數並將其作為字串返回。Bind 方法支援讀/寫功能,可以檢索資料繫結控制元件的值並將任何更改提交回資料庫。
使用
Eval 方法可計算資料繫結控制元件(如 GridView、DetailsView 和 FormView 控制元件)的模板中的後期繫結資料表示式。在執行時,Eval 方法呼叫 DataBinder 物件的 Eval 方法,同時引用命名容器的當前資料項。命名容器通常是包含完整記錄的資料繫結控制元件的最小組成部分,如 GridView 控制元件中的一行。因此,只能對資料繫結控制元件的模板內的繫結使用 Eval 方法。
Eval 方法以資料欄位的名稱作為引數,從資料來源的當前記錄返回一個包含該欄位值的字串。可以提供第二個引數來指定返回字串的格式,該引數為可選引數。字串格式引數使用為 String 類的 Format 方法定義的語法。
使用
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 方法採用資料欄位的名稱作為引數,從而與繫結屬性關聯,如下面的示例所示:
<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>
使用 DataBinder.Eval
ASP.NET 提供了一個名為 DataBinder.Eval 的靜態方法,該方法計算後期繫結的資料繫結表示式,並將結果格式化為字串(可選)。利用此方法,可以避免許多在將值強制為所需資料型別時必須執行的顯式強制轉換操作。
例如,在下面的程式碼片段中,一個整數顯示為貨幣字串。使用標準的 ASP.NET 資料繫結語法,必須首先強制轉換資料行的型別以便檢索資料欄位 IntegerValue。然後,這將作為引數傳遞到 String.Format 方法:
將此語法與 DataBinder.Eval 的語法進行比較,後者只有三個引數:資料項的命名容器、資料欄位名稱和格式字串。在模板化列表中(如 DataList 類、DataGrid 類或 Repeater 類),命名容器始終是 Container.DataItem。
格式字串引數是可選的。如果它被忽略,DataBinder.Eval 將返回型別物件的值,如下面的示例所示:
當對模板化列表中的控制元件進行資料繫結時,DataBinder.Eval 特別有用,因為資料行和資料欄位通常都必須強制轉換。
1。Eval和Bind的區別
繫結表示式
<%# Eval("欄位名") %>
<%# Bind("欄位名") %>
區別 1。eval是隻讀資料,bind是可更新的.
2.當對次表示式操作時候,必須用Eval 如<%# Eval("欄位名").ToString().Trim() %>
2.若GridView中繫結列裡面 設定 內容格式 DataFormateString ={0:d} ,則 必須把 屬性 HtmlCode 設定為false,否則無法起作用;
Eval 單向繫結:資料是隻讀的
Bind 雙向繫結:資料可以更改,並返回伺服器端,伺服器可以處理更改後的資料,如存入資料庫.
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:D}")%> //----2006年10月27日
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:F}")%>//----2006年10月27日 8:31:44
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:G}")%>//----2006-10-27 8:31:44
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:M}")%>//----10月27日
-<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:R}")%>//----Fri, 27 Oct 2006 08:31:44GMT
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:T}")%>//----8:31:44
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:U}")%>//----2006年10月27日 0:31:44
----<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:Y}")%>//----2006年10月
相關文章
- MyBatis中#{}和${}的區別詳解MyBatis
- PHP 中 bind 的用法 self 和 static 的區別PHP
- js中eval詳解,用Js的eval解析JSON中的注意點JSON
- call,apply和bind的區別APP
- Python中none和null的區別詳解!PythonNoneNull
- Linux中&&和&,|和||用法及區別詳解!Linux
- Python中eval與exec的使用及區別Python
- js中call、apply、bind的區別JSAPP
- JS中改變this的指向 call、apply 和 bind 的區別JSAPP
- js中call,apply和bind方法的區別和使用場景JSAPP
- apply 、call 以及 bind 的使用和區別APP
- 最簡單的例子瞭解js中call()、apply()、bind()的區別和聯絡JSAPP
- bind 127.0.0.1 ::1 和 bind 127.0.0.1 有什麼區別127.0.0.1
- JRE 和 JDK 的區別詳解JDK
- python基礎(8)python中is和==的區別詳解Python
- cookie和session的詳解與區別CookieSession
- JavaScript中apply、call、bind的區別與用法JavaScriptAPP
- 詳解bind
- rem與em的使用和區別詳解REM
- DeFi和CeFi的區別詳細講解
- CountDownLatch和CyclicBarrier區別及詳解CountDownLatch
- table中cesllspacing與cellpadding的區別詳解padding
- call、apply、bind 區別APP
- call apply bind區別APP
- 詳解展示元件和容器元件的區別和應用元件
- Html5 canvas中width、height和style的寬高區別詳解HTMLCanvas
- 「乾貨」細說 call、apply 以及 bind 的區別和用法APP
- equals與==的區別(詳解)
- 詳解 Gulp4 和 Gulp3 的區別
- 詳解iframe與frame的區別
- Flutter 佈局(八)- Stack、IndexedStack、GridView詳解FlutterIndexView
- HTML5標籤HTMLCollection和NodeList的區別詳解HTML
- Golang make和new的區別及實現原理詳解Golang
- vue2.x版本中computed和watch的使用入門詳解-關聯和區別Vue
- Thread.currentThread().getName() 和 this.getName()區別詳解thread
- Mysql中tinyint(1)和tinyint(4)的區別詳析WIFRMySql
- 事件關鍵詞 bind 和 catch 的區別、事件物件 target 和 currentTarget 的差異事件物件
- JavaScript中for in 和for of的區別JavaScript
- Js中for in 和for of的區別JS