有時候希望多筆顯示訂單,但是訂單Orders、訂單明細OrderDetail可能分屬於不同的資料表中,因此如果多筆顯示的時候,就可以使用這個【巢狀GridView】的技巧。
這個範例會說明三個東西:
- DropDownList與GridView互動:使用DropDownList顯示員工,當挑選了某個員工,則透過GridView顯示該員工的相關訂單內容。
- 巢狀GridView的設計:透過TemplateField的應用,將訂單明細用第二個GridView顯示在GridView1中的TemplateField中。
- 透過RowDataView使用欄位名稱取得GridView某欄位的內容
方式主要是透過外部的GridView1的RowDataBound事件,為訂單Orders的每個Row設定他內部的SqlDataSouce資料來源是GridView的哪個欄位。相關程式碼如下:
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
'判斷是資料的Row才處理
If e.Row.RowType = DataControlRowType.DataRow Then
'透過FindControl取得裡面的SqlDataSouce物件
Dim sds1 As SqlDataSource = CType(e.Row.Cells(1).FindControl("sdsOrderDetail"), SqlDataSource)
'透過使用DataRowView,能夠用欄位名稱取得欄位的資料
Dim rw As System.Data.DataRowView = CType(e.Row.DataItem, System.Data.DataRowView)
'指定SelectParameter的內容
sds1.SelectParameters(0).DefaultValue = rw.Item("OrderID").ToString
End If
End Sub
執行結果畫面如下:

相關程式碼如下:
http://vip2.blueshop.com.tw/topcat/DEMO/GVGV/GVGV.zip
設計過程錄影如下超連結:
http://vip2.blueshop.com.tw/topcat/DEMO/GVGV/GVGV.html
