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大解密一書」(書名暫訂)。