misc.log

日常茶飯事とお仕事と

コンボボックスのデータバインド

下記のような状況でのデータバインドについて(参考文献: ドットネットマガジン、2003年2月号)。

  • メインテーブルの内容をデータグリッドに表示
  • メインテーブルの1項目の選択肢をコンボボックスに
  • 選択肢の内容は、IDで連携する別テーブルに記述されている

このような場合、まずは選択肢の内容をDataSetに読み込んでおく。

'JobCategoryTable用データアダプタを用意
Adapter_CategoryTable = New OleDb.OleDbDataAdapter( _
    New OleDbCommand( _
        "SELECT JobCategoryID, JobName FROM JobCategoryTable", _
            AccessConnection))

つぎに、メインのテーブルデータもDataSetに読み込んで、グリッドに表示しておく。そして次に選択肢コンボボックスの準備。まずは選択肢をDataSourceプロパティとValueMember、DisplayMemberで用意しておいてから、実データとの連携をDataBindingsプロパティへの処置で設定する。

'JobCategoryコンボボックスのデータソースを設定
With JobCategoryCombo
    .DataSource = DataSet_MessageInfo.JobCategoryTable
    .ValueMember = "JobCategoryID"
    .DisplayMember = "JobName"
End With
'JobCategoryのバインド設定
With JobCategoryCombo
    .DataBindings.Add("SelectedValue", _
        DataSet_MessageInfo, "MessageTable.JobCategoryID")
End With

ここで注意するのは、SelectedValueプロパティにバインドしている点。メインのテーブルにはIDしか入っていないので、これをそのままコンボボックスのTextプロパティに割り当てても、数字(ID)しか表示されない。コンボボックスは、前半のデータソース設定でValueMemberとDisplayMemberの設定がなされているので、このValueMemberを操作しないといけない。ということで、SelectedValueプロパティを利用する。