tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: データテーブルの主キー設定を複数したい
投稿日: 2007/06/27(Wed) 20:23
投稿者魔界の仮面弁士
> マージでしたいことをリレーションでもできるのですか?

リレーションの仕事は、行単位でのテーブル間の関連付けなので、役割が違うかな…。

「発注伝票」テーブルと「発注明細」テーブルをつなげたり、
「銀行」テーブルと「銀行支店」テーブルをつなげたりとか。


---------
ListBox1、DataGridView1、DataGridView2 を貼っておいてください。
---------

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    Dim table1 As New DataTable("親テーブル")
    table1.Columns.Add("コード", GetType(String))
    table1.Columns.Add("名称", GetType(String))

    Dim table2 As New DataTable("子テーブル")
    table2.Columns.Add("コード", GetType(String))
    table2.Columns.Add("番号", GetType(Short))
    table2.Columns.Add("名称", GetType(String))

    Dim ds As New DataSet()
    ds.Tables.Add(table1)
    ds.Tables.Add(table2)

    table1.Rows.Add("01", "血液型")
    table1.Rows.Add("02", "都道府県")

    table2.Rows.Add("01", 1, "A型")
    table2.Rows.Add("01", 2, "B型")
    table2.Rows.Add("01", 3, "O型")
    table2.Rows.Add("01", 4, "AB型")
    table2.Rows.Add("02", 1, "北海道")
    table2.Rows.Add("02", 2, "東京都")
    table2.Rows.Add("02", 3, "沖縄県")

    ds.Relations.Add("関連", table1.Columns("コード"), table2.Columns("コード"))

    'リレーションを使いながら、データを ListBox1 に列挙する例
    For Each table1Row As DataRow In table1.Rows
        ListBox1.Items.Add(String.Format("({0}){1}", table1Row("コード"), table1Row("名称")))
        For Each table2Row As DataRow In table1Row.GetChildRows("関連")
            ListBox1.Items.Add(String.Format(" ({0}){1}", table2Row("番号"), table2Row("名称")))
        Next
    Next

    'DataGridView1 と DataGridView2 を繋いで、リレーションを表現する例
    ' (1側 を選択すると、関連データが 2側に表示される)
    Dim parentBinder As New BindingSource(ds, "親テーブル")
    Dim childBinder As New BindingSource(parentBinder, "関連")
    DataGridView1.DataSource = parentBinder
    DataGridView2.DataSource = childBinder
End Sub

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。