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