FC2ブログ

【VB.NET】2つのDataTableを結合して1つのDataTableにする

20120630_01.jpg

■やりたいこと

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

■やってみた

こちらで紹介されている方法を参考にやってみました。

http://blog.livedoor.jp/naoko_niyaniya/archives/50109078.html
なおこ(・∀・)のニヤニヤする備忘録:[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


■結果

20120630_02.jpg

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】関連記事インデックス
.

コメント

トラックバック