- ベストアンサー
Datasetについて
VB.NET2003で開発を行っています。 Datasetに2つのテーブルがあって、その2つのテーブルを使ってビューを作成したいのですが可能でしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お世話になります。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemDataDataRelationClassTopic.asp ↑を参考につくってみました。 面倒ですね。もっと効率のよいやり方があるのかもしれません。 Try Dim ds As DataSet = New DataSet '親テーブルの作成 Dim Customers_Table As DataTable = New DataTable("Customers") Customers_Table.Columns.Add(New DataColumn("CustID", GetType(String))) Customers_Table.Columns.Add(New DataColumn("CustName", GetType(String))) For i As Integer = 1 To 10 Dim row As DataRow = Customers_Table.NewRow() row("CustID") = i.ToString() row("CustName") = i.ToString() + "さん" Customers_Table.Rows.Add(row) Next ds.Tables.Add(Customers_Table) '子テーブルの作成 Dim Orders_Table As DataTable = New DataTable("Orders") Orders_Table.Columns.Add(New DataColumn("CustID", GetType(String))) Orders_Table.Columns.Add(New DataColumn("OrderName", GetType(String))) For j As Integer = 1 To 10 Dim row As DataRow = Orders_Table.NewRow() row("CustID") = j.ToString() row("OrderName") = "商品コード" + (j + 1000).ToString() Orders_Table.Rows.Add(row) Next '1行追加してみる Dim newrow As DataRow = Orders_Table.NewRow() newrow("CustID") = "1" newrow("OrderName") = "商品コード9999" Orders_Table.Rows.Add(newrow) ds.Tables.Add(Orders_Table) 'リレーションの作成 Dim parentCol As DataColumn Dim childCol As DataColumn parentCol = ds.Tables("Customers").Columns("CustID") childCol = ds.Tables("Orders").Columns("CustID") Dim relCustOrder As DataRelation relCustOrder = New DataRelation("CustomersOrders", parentCol, childCol) ds.Relations.Add(relCustOrder) 'Viewの作成 Dim customerView As DataView = New DataView(Customers_Table, "", "", DataViewRowState.CurrentRows) Dim orderView As DataView Dim customerDRV, orderDRV As DataRowView '表示用のDataTable Dim joindDt As DataTable = New DataTable("Name_And_Order") joindDt.Columns.Add("CustID", GetType(String)) joindDt.Columns.Add("CustName", GetType(String)) joindDt.Columns.Add("OrderName", GetType(String)) For Each customerDRV In customerView orderView = customerDRV.CreateChildView(relCustOrder) For Each orderDRV In orderView Dim row As DataRow = joindDt.NewRow() row("CustID") = customerDRV("CustID") row("CustName") = customerDRV("CustName") row("OrderName") = orderDRV("OrderName") joindDt.Rows.Add(row) Next Next Me.DataGrid1.DataSource = joindDt Catch ex As Exception Trace.WriteLine(ex.Message) End Try
その他の回答 (1)
- naganaga_001
- ベストアンサー率71% (172/242)
お世話になります。 2つのテーブルに関連があるのなら、 DataRelationを使って、 2つのテーブルの リレーションを正しく設定すれば可能ですね。
お礼
回答ありがとうございます。 参考になるHP等あれば教えていただけるとうれしいのですが。 いまいちRelationが理解できてないもので。
お礼
回答ありがとうございます。 サンプルソースまでつけていただき申し訳ないです。 このソースをもとにやってみます。 ありがとうございました。