有時候希望多筆顯示訂單,但是訂單Orders、訂單明細OrderDetail可能分屬於不同的資料表中,因此如果多筆顯示的時候,就可以使用這個【巢狀GridView】的技巧。
這個範例會說明三個東西:
1.DropDownList與GridView互動
2.巢狀GridView的設計
3.透過RowDataView使用欄位名稱取得GridView某欄位的內容
有時候希望多筆顯示訂單,但是訂單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
上面的連結已經失效,小喵特別另外再次錄製兩種方式
以下是這兩種方式:
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |