eval()方法在運行時使用反射執行後期綁定計算因此與標准的數據綁定方法bind相比會導致性能明顯下降它一般用在綁定時需要格式化字符串的情況下多數情況盡量少用此方法
Eval 方法是靜態(只讀)方法該方法采用數據字段的值作為參數並將其作為字符串返回Bind 方法支持讀/寫功能可以檢索數據綁定控件的值並將任何更改提交回數據庫
中的Bind和Eval使用 Eval 方法
Eval 方法可計算數據綁定控件(如 GridViewDetailsView 和 FormView 控件)的模板中的後期綁定數據表達式在運行時Eval 方法調用 DataBinder 對象的 Eval 方法同時引用命名容器的當前數據項命名容器通常是包含完整記錄的數據綁定控件的最小組成部分如 GridView 控件中的一行因此只能對數據綁定控件的模板內的綁定使用 Eval 方法
Eval 方法以數據字段的名稱作為參數從數據源的當前記錄返回一個包含該字段值的字符串可以提供第二個參數來指定返回字符串的格式該參數為可選參數字符串格式參數使用為 String 類的 Format 方法定義的語法
中的Bind和Eval使用 Bind 方法
Bind 方法與 Eval 方法有一些相似之處但也存在很大的差異雖然可以像使用 Eval 方法一樣使用 Bind 方法來檢索數據綁定字段的值但當數據可以被修改時還是要使用 Bind 方法
在 中數據綁定控件(如 GridViewDetailsView 和 FormView 控件)可自動使用數據源控件的更新刪除和插入操作例如如果已為數據源控件定義了 SQL SelectInsertDelete 和 Update 語句則通過使用 GridViewDetailsView 或 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=> < 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 語法綁定的每個控件屬性值都會被提取出來並傳遞給數據源控件以執行更新操作
中的Bind和Eval使用 DataBinderEval
提供了一個名為 DataBinderEval 的靜態方法該方法計算後期綁定的數據綁定表達式並將結果格式化為字符串(可選)利用此方法可以避免許多在將值強制為所需數據類型時必須執行的顯式強制轉換操作
例如在下面的代碼片段中一個整數顯示為貨幣字符串使用標准的 數據綁定語法必須首先強制轉換數據行的類型以便檢索數據字段 IntegerValue然後這將作為參數傳遞到 StringFormat 方法
< %# StringFormat({:c} ((DataRowView)ContainerDataItem)[IntegerValue]) %> 將此語法與 DataBinderEval 的語法進行比較後者只有三個參數數據項的命名容器數據字段名稱和格式字符串在模板化列表中(如 DataList 類DataGrid 類或 Repeater 類)命名容器始終是 ContainerDataItem
< %# DataBinderEval(ContainerDataItem IntegerValue {:c}) %> 格式字符串參數是可選的如果它被忽略DataBinderEval 將返回類型對象的值如下面的示例所示
< %# (bool)DataBinderEval(ContainerDataItem BoolValue) %> 當對模板化列表中的控件進行數據綁定時DataBinderEval 特別有用因為數據行和數據字段通常都必須強制轉換
以上就是中Bind和Eval的區別希望在的應用中對大家有所幫助
From:http://tw.wingwit.com/Article/program/net/201311/13554.html