• ベストアンサー

Datasetについて

VB.NET2003で開発を行っています。 Datasetに2つのテーブルがあって、その2つのテーブルを使ってビューを作成したいのですが可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

hara30s
質問者

お礼

回答ありがとうございます。 サンプルソースまでつけていただき申し訳ないです。 このソースをもとにやってみます。 ありがとうございました。

その他の回答 (1)

回答No.1

お世話になります。 2つのテーブルに関連があるのなら、 DataRelationを使って、 2つのテーブルの リレーションを正しく設定すれば可能ですね。

hara30s
質問者

お礼

回答ありがとうございます。 参考になるHP等あれば教えていただけるとうれしいのですが。 いまいちRelationが理解できてないもので。

関連するQ&A