ASP.NET 2.0 – 如何巢狀化 GridView 控制項

摘要:ASP.NET 2.0 – 如何巢狀化 GridView 控制項

圖表 1

 

最近聽到有許多朋友詢問如何以巢狀方式使用 GridView 控制項,也就是說在 GridView 控制項中再內含另外一個 GridView 控制項。我們最近在撰寫 ASP.NET AJAX 一書時,剛好撰寫了一個這樣的範例,在此與大家分享其關鍵技巧。 

圖表 1 所示者是我們所撰寫的網頁範例,從外觀可以看出,我們是以巢狀方式使用 GridView 控制項。外層的 GridView 控制項用以顯示產品類別資料(也就是父資料記錄),內層的 GridView 控制項用以顯示特定類別的各項產品(也就是子資料記錄)。要如何製作這樣的介面呢?關鍵技巧說明如下: 

q  首先,您必須替外層的 GridView 控制項加入一個樣版資料行(也就是 TemplateField),並於此樣版資料行中加入一個 GridView 控制項(如圖表 2 所示),這一個位於樣版資料行中的 GridView 控制項將成為內層的 GridView 控制項。

 


圖表 2

 

q  請替外層 GridView 控制項的 RowDataBound 事件處理常式撰寫下列程式碼,以便將外層之產品類別資料列的「類別編號」欄位值指派給內層 GridView 控制項之資料來源之 SELECT 陳述式的 CategoryID 參數,如此一來,內層 GridView 控制項就會顯示出與所在產品類別資料列相關聯的產品資料:

Protected Sub ProductCategoryGridView_RowDataBound( _
  ByVal sender As Object, _
  ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
  Handles ProductCategoryGridView.RowDataBound
  If e.Row.RowType = DataControlRowType.DataRow Then
      Dim s As SqlDataSource = _
        CType(e.Row.FindControl("ProductsDataSource"), SqlDataSource)
      Dim r As System.Data.DataRowView = _
        CType(e.Row.DataItem, System.Data.DataRowView)
      s.SelectParameters("CategoryID").DefaultValue = r("
類別編號").ToString()
  End If
End
Sub

 

本文內容節錄自章立民研究室正在撰寫的ASP.NET AJAX大解密一書」(書名暫定)

 

章立民研究室 2006/12/20