GridView 中 Bind和Eval的區別詳解

2022-03-14 16:03:16 字數 4451 閱讀 2181

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>

<

tdalign=right

>

<

b>employee id:

b>

td>

<

td>

<%# eval("employeeid") %>

td>

tr>

<

tr>

<

tdalign=right

>

<

b>first name:

b>

td>

<

td>

<

asp:textbox

id="editfirstnametextbox"

runat="server"

text='<%# bind("firstname") %>'

/>

td>

tr>

<

tr>

<

tdalign=right

>

<

b>last name:

b>

td>

<

td>

<

asp:textbox

id="editlastnametextbox"

runat="server"

text='<%# bind("lastname") %>'

/>

td>

tr>

<

tr>

<

tdcolspan="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("", ((datarowview)container.dataitem)["integervalue"]) %>

將此語法與 databinder.eval 的語法進行比較,後者只有三個引數:資料項的命名容器、資料欄位名稱和格式字串。在模板化列表中(如 datalist 類、datagrid 類或 repeater 類),命名容器始終是 container.dataitem。

<%# databinder.eval(container.dataitem, "integervalue", "") %>

格式字串引數是可選的。如果它被忽略,databinder.eval 將返回型別物件的值,如下面的示例所示:

<%# (bool)databinder.eval(container.dataitem, "boolvalue") %>

當對模板化列表中的控制項進行資料繫結時,databinder.eval 特別有用,因為資料行和資料字段通常都必須強制轉換。

1。eval和bind的區別

繫結表示式

<%# eval("欄位名") %>

<%# bind("欄位名") %>

區別 1。eval是唯讀資料,bind是可更新的.

2.當對次表示式操作時候,必須用eval 如<%# eval("欄位名").tostring().trim() %>

2.若gridview中繫結列裡面 設定 內容格式 dataformatestring = ,則 必須把 屬性 htmlcode 設定為false,否則無法起作用;

eval 單向繫結:資料是唯讀的

bind 雙向繫結:資料可以更改,並返回伺服器端,伺服器可以處理更改後的資料,如存入資料庫.

----<%# databinder.eval(container.dataitem,"dateandtime","")%> //----2023年10月27日

----<%# databinder.eval(container.dataitem,"dateandtime","")%>//----2023年10月27日 8:31:44

----<%# databinder.eval(container.dataitem,"dateandtime","")%>//----2006-10-27 8:31:44

----<%# databinder.eval(container.dataitem,"dateandtime","")%>//----10月27日

-<%# databinder.eval(container.dataitem,"dateandtime","")%>//----fri, 27 oct 2006 08:31:44gmt

----<%# databinder.eval(container.dataitem,"dateandtime","")%>//----8:31:44

----<%# databinder.eval(container.dataitem,"dateandtime","")%>//----2023年10月27日0:31:44

----<%# databinder.eval(container.dataitem,"dateandtime","")%>//----2023年10月

underscore的bind和bindAll方法

bind方法和bindall方法都是用來設定函式的this值的,區別是呼叫方式不同。var xiaoming bind var func bind xiaoming,xiaoming.say func i am xiaoming bindall bindall xiaoming,say var fu...

GridView使用自定義表頭和匯出到Excel

如上圖 檢視列 是靜態新增上的,表頭和資料則是動態新增的。如下 using system using system.data using system.configuration using system.collections using system.web using system.web.s...

jquery中val 和bind 用法

當用於返回值時 該方法返回第乙個匹配元素的 value 屬性的值。當用於設定值時 該方法設定所有匹配元素的 value 屬性的值。注意 val 方法通常與 html 表單元素一起使用。例子 document ready function 在jsp頁面如果在標籤中使用同名的名字,會在頁面造成一些衝突,...