摘要: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大解密一書」(書名暫定)。
章立民研究室