下記のような状況でのデータバインドについて(参考文献: ドットネットマガジン、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プロパティを利用する。