リレーションシップの設定と活用法について

download.gifサンプル コードのダウンロード (vbmigtips_Relations.msi, 544 KB)

※ このサンプルをインストールするには Visual Studio 2005 が必要です。

今回は、2 つのテーブル間でリレーションシップの設定を行い、一覧情報と詳細情報を表示するアプリケーション(図1)を作成します。

 図
 図 1

図1 のアプリケーションは、名簿欄の DataGridView に親テーブル(一覧)を表示し、連絡先欄の DataGridView には親テーブルで選択された項目に対応した、子テーブル(詳細)の情報を表示します。

Visual Basic 6.0 や Visual Basic .NET では、Relations クラスを使用してリレーションシップの設定を行う必要がありました。一方、Visual Basic 2005 では、データセット デザイナとウィザードの強化により、簡単に設定出るようになりました。

Visual Basic 2005 では、まず、[データソース]ウィンドウを開き、[新しいデータソースの追加...]([データ]メニューの[新しいデータソースの追加...])を選択して表示される、[データソース構成ウィザード]ダイアログでデータベースへの接続と DataSet への格納を設定します。指示に従って図2 の[リスト]テーブルと[連絡先]テーブルを DataSet に追加します。

図
図 2

続いて、リレーションシップの設定を行います。今回、[データセット デザイナ]で設定します。[データセット デザイナ]で、ショートカットメニュー[追加]の[Relation]を選択します。すると、[リレーションシップ]ダイアログ(図3)が表示されます。

 図
 図 3

上図のように設定し、[OK]ボタンをクリックすると、図4 のようにリレーションシップが表示されます。

 図
 図 4

次に、Form に 2 つの DataGridView コントロールを追加し、それぞれの DataSource プロパティを設定します。[リスト]テーブルの一覧を表示する DataGridView(図1 の上部)には「リストBindingSource」を、一覧で選択した情報の詳細を表示する DataGridView(図1 の下部)には「連絡先BindingSource」を設定します。

最後に、下記コードを実装します。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Try
        Me.リストTableAdapter.Fill(Me.Db1DataSet.リスト)
        Me.連絡先TableAdapter.Fill(Me.Db1DataSet.連絡先)
		
        連絡先BindingSource.DataSource = リストBindingSource
        連絡先BindingSource.DataMember = "リスト_連絡先"
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try
	
    DataGridView1.AutoResizeColumns()
    DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
End Sub

リスト 1

上記(リスト1)の「Me.リストTableAdapter.Fill(Me.Db1DataSet.リスト)」では、データセットに格納されている[リスト]テーブルのレコードを表示し、「Me.連絡先TableAdapter.Fill(Me.Db1DataSet.連絡先)」では、データセットに格納されている[連絡先]テーブルのレコードを表示します。「連絡先BindingSource.DataSource = リストBindingSource」では、コネクタのバインド先であるデータ ソースを設定し、「連絡先BindingSource.DataMember = "リスト_連絡先"」で、コネクタの現在のバインド先であるデータ ソースのサブリストを設定します。これにより、DataGridView1 で選択されているレコードと ID が一致するレコードのみを[連絡先]テーブルから取得し、表示します。

以上の設定を行い、プロジェクトを実行すると、図1 が表示され、名簿欄のレコードを選択すると、連絡席欄に同じ「ID」を持ったレコードが表示されます。