ASP.NET Eval四種綁定方式(轉載)

ASP.NET Eval四種綁定方式:

1、1.x中的數據綁定語法

<asp:Literal id="litEval2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "userName")%>' />

2、 2.x簡化Eval數據綁定語法

<asp:Literal id="litEval1" runat="server" Text='<%Eval("userName")%>' />

3、第二種方法的方法重載

<a href='<%# Eval("userId","Default.aspx?id={0}")%>'><%# Eval("userName") %></a>

4、eval同時綁定兩個值

<a href='<%# string.Format("Default.aspx?id={0}&role={1}", Eval("userId"),Eval("userRole"))%>'><%# Eval("userName") %></a>

eval_r()方法在運行時使用反射執行後期綁定計算,因此與標準的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_r("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_r(Container.DataItem, "IntegerValue", "{0:c}") %>


格式字符串參數是可選的。如果它被忽略,DataBinder.Eval 將返回類型對象的值,如下面的示例所示:
<%# (bool)DataBinder.eval_r(Container.DataItem, "BoolValue") %>
當對模板化列表中的控件進行數據綁定時,DataBinder.Eval 特別有用,因爲數據行和數據字段通常都必須強制轉換。


在TemplateField模板中爲了能夠有限制的或者取出數據庫中某列的值時,可以用Bind和Eval方法來實現。以下是Bind方法的格式,Eval的格式也是和Bind一樣的。 Bind("列的名稱","顯示的格式文")

比如我們要取個日期型的數據,在數據庫中列名是updated,數值是2008/06/01。但是想2008年06月01日這樣顯示,我們可以這樣來寫Bind("updated", "{0:yyyy年MM月dd日}"),Eval也是如此。

兩者都能讀取數據中的值,並顯示。當我們使用編輯更新操作時,Bind能夠自動的將修改的值更新到數據庫中,並顯示出修改後的值。但是用了Eval卻只能得到錯誤畫面,新的數據沒有更新到數據庫中。

從這點看來,Bind方法和Eval方法的區別就是:Bind方法在讀取和更新數據這2方面都是可以,但是Eval方法只能讀取顯示數據。所以,我們在選擇Bind方法和Eval方法的時候,必須要有爭對性,當數據肯定需要更新操作的時候我們應該使用Bind,只是顯示數據,不會有任何操作的就可以使用Eval方法。

在更新操作中我們可以在GridView1_RowUpdating事件中操作,例子如下:

如果我們能充分理解Bind方法和Eval方法,其實也就沒必要向上面那樣去寫,都是可以自動完成的。上面的方法除了比較複雜的操作纔會用到,這也是一個使用技巧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章