【VB.NET】2つのDataTableを結合して1つのDataTableにする
■やりたいこと
2つのDataTableを結合して、データをDataGridViewに表示する。
たとえば、
[Table1]
"0" : "織田信長"
"1" : "豊臣秀吉"
"2" : "徳川家康"
[Table2]
"0" : "おだのぶなが"
"1" : "とよとみひでよし"
"2" : "とくがわいえやす"
という2つのデータテーブルがあったとして、これを結合させてDataGridViewに表示させる。
■開発環境
・Microsoft Visual Basic 2005 Express Edition
・Microsoft .NET Framework Version 2.0
■やってみた
こちらで紹介されている方法を参考にやってみました。
なおこ(・∀・)のニヤニヤする備忘録:[VB.NET(2003)] DataRelationを使ってみる
(1)まず2つのデータテーブルを用意
' 1つめのデータテーブル
Dim dtTbl As New DataTable("dtTbl")
dtTbl.Columns.Add("ID", GetType(String))
dtTbl.Columns.Add("DisplayName", GetType(String))
dtTbl.Rows.Add(0, "織田信長")
dtTbl.Rows.Add(1, "豊臣秀吉")
dtTbl.Rows.Add(2, "徳川家康")
' 2つめのデータテーブル
Dim dtTbl2 As New DataTable("dtTbl2" )
dtTbl2.Columns.Add("ID", GetType(String))
dtTbl2.Columns.Add("Yomigana", GetType(String))
dtTbl2.Rows.Add(2, "とくがわいえやす")
dtTbl2.Rows.Add(1, "とよとみひでよし")
dtTbl2.Rows.Add(0, "おだのぶなが")
(2)データセットとリレーションを作成
' データセットを作成
Dim ds As New DataSet
ds.Tables.Add(dtTbl)
ds.Tables.Add(dtTbl2)
' リレーションを作成
Dim col1 As DataColumn = dtTbl.Columns("ID")
Dim col2 As DataColumn = dtTbl2.Columns("ID")
Dim rel1 As DataRelation = New DataRelation("Relation1", col1, col2, True)
ds.Relations.Add(rel1)
(3)表示用のデータテーブルを作成
' ビューの作成
Dim userView As DataView = New DataView(dtTbl)
Dim yomiView As DataView
Dim userDRV, yomiDRV As DataRowView
' 表示用のデータテーブルを作成
Dim dtDisplayTbl As DataTable = New DataTable("dtDisplayTbl")
dtDisplayTbl.Columns.Add("ID", GetType(String))
dtDisplayTbl.Columns.Add("DisplayName", GetType(String))
dtDisplayTbl.Columns.Add("Yomigana", GetType(String))
(4)表示用データテーブルにデータをセット
' ビューの内容をデータテーブルに格納
For Each userDRV In userView
yomiView = userDRV.CreateChildView(rel1)
For Each yomiDRV In yomiView
Dim row As DataRow = dtDisplayTbl.NewRow()
row("ID") = userDRV("ID")
row("DisplayName") = userDRV("DisplayName")
row("Yomigana") = yomiDRV("Yomigana")
dtDisplayTbl.Rows.Add(row)
Next
Next
(5)DataGridViewに表示
' 表示
DataGridView1.Columns.Clear()
DataGridView1.DataSource = dtDisplayTbl
■結果
2つのデータテーブルが紐づいてくれたみたい。
■参考URL
なおこ(・∀・)のニヤニヤする備忘録:[VB.NET(2003)] DataRelationを使ってみる
http://blog.livedoor.jp/naoko_niyaniya/archives/50109078.html
[VB.NET] リレーショナルデータテーブルの構築: 10 行でズバリ!! 言語: VB.NET
http://code.msdn.microsoft.com/windowsdesktop/10-VB-c2b60fd1
情報のご提供ありがとうございました!
■ブログ内記事一覧
【VB.NET】関連記事インデックス
.