ASP.NET資料繫結運算式文法

來源:互聯網
上載者:User

資料繫結文法
資料繫結運算式包含在 <%# 和 %> 分隔字元之內,並使用 Eval 和 Bind 函數。Eval 函數用於定義單向(唯讀)綁定。Bind 函數用於定義雙向(可更新)綁定。除了通過在資料繫結運算式中調用 Eval 和 Bind 方法執行資料繫結外,還可以調用 <%# 和 %> 分隔字元之內的任何公用範圍代碼,以在頁面處理過程中執行該代碼並返回一個值。

調用控制項或 Page 類的 DataBind 方法時,會對資料繫結運算式進行解析。對於有些控制項,如 GridView、DetailsView 和 FormView 控制項,會在控制項的 PreRender 事件期間自動解析資料繫結運算式,不需要顯式調用 DataBind 方法。

下面的程式碼範例示範如何將資料繫結運算式與 ItemTemplate 中的 FormView 控制項結合使用。

<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 方法可計算資料繫結控制項(如 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("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" />
        &nbsp;
        <asp:LinkButton ID="CancelUpdateButton" RunAt="server"
          Text="Cancel" CommandName="Cancel" />
      </td>
    </tr>
  </table>
</EditItemTemplate>
 

單擊行的 Update 按鈕時,使用 Bind 文法綁定的每個控制項屬性值都會被提取出來,並傳遞給資料來源控制項以執行更新操作。

顯式調用 DataBind 方法
有些控制項,如 GridView、FormView 和 DetailsView 控制項,當它們通過 DataSourceID 屬性綁定到資料來源控制項時,會通過隱式調用 DataBind 方法來執行綁定。但是,有些情況需要通過顯式調用 DataBind 方法來執行綁定。

其中一種情況就是使用 DataSource 屬性(而非 DataSourceID 屬性)將某個控制項綁定到資料來源控制項時。在這種情況下,需要顯式調用 DataBind 方法,從而執行資料繫結和解析資料繫結運算式。

另一種情況就是需要手動重新整理資料繫結控制項中的資料時。假設有這樣一個頁面,其中有兩個控制項,這兩個控制項都顯示來自同一資料庫的資訊(可能使用不同的視圖)。在這種情況下,可能需要顯式地將控制項重新綁定到資料,以保持資料顯示的同步。例如,可能有一個顯示產品列表的 GridView 控制項,和一個允許使用者編輯單個產品的 DetailsView 控制項。雖然 GridView 和 DetailsView 控制項所顯示的資料都來自同一資料來源,但被綁定到不同的資料來源控制項,因為這兩個控制項使用不同的查詢來擷取其資料。使用者可能會使用 DetailsView 控制項更新記錄,從而引發由關聯的資料來源控制項執行更新。但是,由於 GridView 控制項被綁定到不同的資料來源控制項,所以,該控制項仍將顯示舊的記錄值,直至頁面被重新整理時才會更新。因此,在 DetailsView 控制項更新資料後,可以調用 DataBind 方法。這會使 GridView 控制項更新其視圖,並重新執行任何資料繫結運算式以及 <%# 和 %> 分隔字元之內的公用範圍代碼。這樣一來,GridView 控制項將會反映 DetailsView 控制項所做的更新。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.