ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用
來(lái)源:易賢網(wǎng) 閱讀:990 次 日期:2016-08-06 13:47:29
溫馨提示:易賢網(wǎng)小編為您整理了“ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用”,方便廣大網(wǎng)友查閱!

數(shù)據(jù)綁定是ASP.NET中操作數(shù)據(jù)的基礎(chǔ)方式,這里我們暫時(shí)拋開(kāi).NET提供的控件,來(lái)從基礎(chǔ)上講解ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用:

<%# %> 語(yǔ)法

ASP.NET 介紹了一種新的聲明性語(yǔ)法 <%# %>。該語(yǔ)法是在 .aspx 頁(yè)中使用數(shù)據(jù)綁定的基礎(chǔ)。所有數(shù)據(jù)綁定表達(dá)式都必須包含在這些字符中。下面的列表包含從多個(gè)源進(jìn)行簡(jiǎn)單數(shù)據(jù)綁定的示例:

簡(jiǎn)單屬性(用于客戶的語(yǔ)法):

<%# custID %>

集合(用于訂單的語(yǔ)法):

<asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">

 表達(dá)式(用于聯(lián)系人的語(yǔ)法):

<%# ( customer.First Name + " " + customer.LastName ) %>

方法結(jié)果(用于未結(jié)清余額的語(yǔ)法):

<%# GetBalance(custID) %>

在前面的示例中,<%# %> 內(nèi)聯(lián)標(biāo)記用于指示將把特定數(shù)據(jù)源中的信息放在 .aspx 頁(yè)中的什么位置。以下數(shù)據(jù)綁定示例使用 TextBox Web 服務(wù)器控件:

<asp:textbox id=txt text="<%# custID %>" runat=server />

Page.DataBind() versus Control.DataBind()

確定特定數(shù)據(jù)源并設(shè)置 .aspx 頁(yè)上的對(duì)象之后,您必須將數(shù)據(jù)綁定到數(shù)據(jù)源。您可以使用 Page.DataBind 或 Control.DataBind 方法將數(shù)據(jù)綁定到數(shù)據(jù)源。

這兩種方法的使用方式很相似。主要差別在于:調(diào)用 Page.DataBind 方法后,所有數(shù)據(jù)源都將綁定到它們的服務(wù)器控件。在顯式調(diào)用 Web 服務(wù)器控件的 DataBind 方法或在調(diào)用頁(yè)面級(jí)的 Page.DataBind 方法之前,不會(huì)有任何數(shù)據(jù)呈現(xiàn)給控件。通常,可以從 Page_Load 事件調(diào)用 Page.DataBind(或 DataBind)。

數(shù)據(jù)綁定表達(dá)式深入

數(shù)據(jù)綁定表達(dá)式包含在 <%# 和 %> 分隔符之內(nèi),并使用 Eval 和 Bind 函數(shù)。Eval 函數(shù)用于定義單向(只讀)綁定。Bind 函數(shù)用于定義雙向(可更新)綁定。除了通過(guò)在數(shù)據(jù)綁定表達(dá)式中調(diào)用 Eval 和 Bind 方法執(zhí)行數(shù)據(jù)綁定外,還可以調(diào)用 <%# 和 %> 分隔符之內(nèi)的任何公共范圍代碼,以在頁(yè)面處理過(guò)程中執(zhí)行該代碼并返回一個(gè)值。

調(diào)用控件或 Page 類(lèi)的 DataBind 方法時(shí),會(huì)對(duì)數(shù)據(jù)綁定表達(dá)式進(jìn)行解析。對(duì)于有些控件,如 GridView、DetailsView 和 FormView 控件,會(huì)在控件的 PreRender 事件期間自動(dòng)解析數(shù)據(jù)綁定表達(dá)式,不需要顯式調(diào)用 DataBind 方法。

下面的代碼示例演示如何將數(shù)據(jù)綁定表達(dá)式與 ItemTemplate 中的 FormView 控件結(jié)合使用。

<asp:FormView ID="FormView1"

 DataSourceID="SqlDataSource1"

 DataKeyNames="ProductID"   

 RunAt="server">

 <ItemTemplate>

  <table>

   <tr><td align="right"><b>Product ID:</b></td>    <td><%# Eval("ProductID") %></td></tr>

   <tr><td align="right"><b>Product Name:</b></td>   <td><%# Eval("ProductName") %></td></tr>

   <tr><td align="right"><b>Category ID:</b></td>   <td><%# Eval("CategoryID") %></td></tr>

   <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>

   <tr><td align="right"><b>Unit Price:</b></td>    <td><%# Eval("UnitPrice") %></td></tr>

  </table>         

 </ItemTemplate>         

</asp:FormView>

使用 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ù)字段的名稱(chēng)作為參數(shù),從數(shù)據(jù)源的當(dāng)前記錄返回一個(gè)包含該字段值的字符串。可以提供第二個(gè)參數(shù)來(lái)指定返回字符串的格式,該參數(shù)為可選參數(shù)。字符串格式參數(shù)使用為 String 類(lèi)的 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ù)字段的名稱(chēng)作為參數(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í)行更新操作。

顯式調(diào)用 DataBind 方法

有些控件,如 GridView、FormView 和 DetailsView 控件,當(dāng)它們通過(guò) DataSourceID 屬性綁定到數(shù)據(jù)源控件時(shí),會(huì)通過(guò)隱式調(diào)用 DataBind 方法來(lái)執(zhí)行綁定。但是,有些情況需要通過(guò)顯式調(diào)用 DataBind 方法來(lái)執(zhí)行綁定。

其中一種情況就是使用 DataSource 屬性(而非 DataSourceID 屬性)將某個(gè)控件綁定到數(shù)據(jù)源控件時(shí)。在這種情況下,需要顯式調(diào)用 DataBind 方法,從而執(zhí)行數(shù)據(jù)綁定和解析數(shù)據(jù)綁定表達(dá)式。

另一種情況就是需要手動(dòng)刷新數(shù)據(jù)綁定控件中的數(shù)據(jù)時(shí)。假設(shè)有這樣一個(gè)頁(yè)面,其中有兩個(gè)控件,這兩個(gè)控件都顯示來(lái)自同一數(shù)據(jù)庫(kù)的信息(可能使用不同的視圖)。在這種情況下,可能需要顯式地將控件重新綁定到數(shù)據(jù),以保持?jǐn)?shù)據(jù)顯示的同步。例如,可能有一個(gè)顯示產(chǎn)品列表的 GridView 控件,和一個(gè)允許用戶編輯單個(gè)產(chǎn)品的 DetailsView 控件。雖然 GridView 和 DetailsView 控件所顯示的數(shù)據(jù)都來(lái)自同一數(shù)據(jù)源,但被綁定到不同的數(shù)據(jù)源控件,因?yàn)檫@兩個(gè)控件使用不同的查詢來(lái)獲取其數(shù)據(jù)。用戶可能會(huì)使用 DetailsView 控件更新記錄,從而引發(fā)由關(guān)聯(lián)的數(shù)據(jù)源控件執(zhí)行更新。但是,由于 GridView 控件被綁定到不同的數(shù)據(jù)源控件,所以,該控件仍將顯示舊的記錄值,直至頁(yè)面被刷新時(shí)才會(huì)更新。因此,在 DetailsView 控件更新數(shù)據(jù)后,可以調(diào)用 DataBind 方法。這會(huì)使 GridView 控件更新其視圖,并重新執(zhí)行任何數(shù)據(jù)綁定表達(dá)式以及 <%# 和 %> 分隔符之內(nèi)的公共范圍代碼。這樣一來(lái),GridView 控件將會(huì)反映 DetailsView 控件所做的更新。

使用對(duì)查找表的綁定

一種有關(guān)數(shù)據(jù)綁定控件的常見(jiàn)方案是允許用戶使用 DropDownList 控件或其他列表控件從查找表中選擇一個(gè)值,以更新或插入該值。在這種情況下,將該查找控件綁定到返回可能值列表的單獨(dú)數(shù)據(jù)源,而將該查找控件的選定值綁定到父數(shù)據(jù)綁定行中的字段。

可以按照如下方法添加此功能。首先,對(duì)于查找控件,向數(shù)據(jù)綁定控件(例如 GridView、DetailsView 或 FormView 控件)中的模板添加一個(gè)列表控件(DropDownList 或 ListBox 控件)。接著將查找控件的 SelectedValue 屬性綁定到容器控件的數(shù)據(jù)源中的相關(guān)字段。其次,將查找控件的 DataSourceID 屬性設(shè)置為可檢索查找值的數(shù)據(jù)源控件。接著將查找控件的 DataTextField 屬性設(shè)置為查找表中包含要顯示的值的字段,并將其 DataValueField 屬性設(shè)置為查找表中包含查找值的唯一標(biāo)識(shí)符的字段(如果適用)。

下面的代碼示例演示一個(gè) DropDownList 控件,此控件包括在 FormView 控件的 InsertItemTemplate 模板中(它也可以是包括在 DetailsView 控件的 Fields 屬性或 GridView 控件的 Columns 屬性中的 TemplateField 的 InsertItemTemplate 模板)。DropDownList 控件的 SelectedValue 屬性使用 Bind 方法實(shí)現(xiàn)與 FormView 控件當(dāng)前行的 CategoryID 字段之間的雙向綁定。將 DropDownList 控件的 DataSourceID 屬性設(shè)置為單獨(dú)的數(shù)據(jù)源控件,用于檢索可能的類(lèi)別名稱(chēng)和 ID 列表。將 DropDownList 控件的 DataTextField 屬性設(shè)置為查找數(shù)據(jù)源中的 CategoryName 字段,以便顯示可能的類(lèi)別名稱(chēng)列表。將 DropDownList 控件的 DataValueField 屬性設(shè)置為查找數(shù)據(jù)源中相關(guān)類(lèi)別名稱(chēng)的 CategoryID 字段。當(dāng)用戶從列表中選擇類(lèi)別名稱(chēng)時(shí),DropDownList 控件的 SelectedValue 屬性將被設(shè)置為選定類(lèi)別名稱(chēng)的類(lèi)別 ID。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)