ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用
來源:易賢網(wǎng) 閱讀:895 次 日期: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í)拋開.NET提供的控件,來從基礎(chǔ)上講解ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用:

<%# %> 語法

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

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

<%# custID %>

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

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

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

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

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

<%# GetBalance(custID) %>

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

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

Page.DataBind() versus Control.DataBind()

確定特定數(shù)據(jù)源并設(shè)置 .aspx 頁上的對(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)用頁面級(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ù)用于定義雙向(可更新)綁定。除了通過在數(shù)據(jù)綁定表達(dá)式中調(diào)用 Eval 和 Bind 方法執(zhí)行數(shù)據(jù)綁定外,還可以調(diào)用 <%# 和 %> 分隔符之內(nèi)的任何公共范圍代碼,以在頁面處理過程中執(zhí)行該代碼并返回一個(gè)值。

調(diào)用控件或 Page 類的 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ù)字段的名稱作為參數(shù),從數(shù)據(jù)源的當(dāng)前記錄返回一個(gè)包含該字段值的字符串??梢蕴峁┑诙€(gè)參數(shù)來指定返回字符串的格式,該參數(shù)為可選參數(shù)。字符串格式參數(shù)使用為 String 類的 Format 方法定義的語法。

使用 Bind 方法

Bind 方法與 Eval 方法有一些相似之處,但也存在很大的差異。雖然可以像使用 Eval 方法一樣使用 Bind 方法來檢索數(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 語句,則通過使用 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ù)字段的名稱作為參數(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 語法綁定的每個(gè)控件屬性值都會(huì)被提取出來,并傳遞給數(shù)據(jù)源控件以執(zhí)行更新操作。

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

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

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

一種有關(guān)數(shù)據(jù)綁定控件的常見方案是允許用戶使用 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ù)源控件,用于檢索可能的類別名稱和 ID 列表。將 DropDownList 控件的 DataTextField 屬性設(shè)置為查找數(shù)據(jù)源中的 CategoryName 字段,以便顯示可能的類別名稱列表。將 DropDownList 控件的 DataValueField 屬性設(shè)置為查找數(shù)據(jù)源中相關(guān)類別名稱的 CategoryID 字段。當(dāng)用戶從列表中選擇類別名稱時(shí),DropDownList 控件的 SelectedValue 屬性將被設(shè)置為選定類別名稱的類別 ID。

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

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(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)警備案專用圖標(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)警專用圖標(biāo)