■社員名コンボボックスの設定
Employee ID表示部分に関しても基本的にはいま行った作業の繰り返しですが、ここでは社員データテーブルで2つの列(FirstName列とLastName列)に分かれて格納されている値を合体させて、コンボボックスに表示させてみます。
これはデータテーブルに「計算列」と呼ばれる列を追加し、その列の値をコンボボックスで表示することで可能になります。計算列とは、同じレコードのほかの列の値から計算して作り出した値を持った列です。
まず、データセット・デザイナを開き、社員マスタ・データテーブルを右クリックし、メニューで[追加]−[列]を選択します。これにより新しい列がデータテーブルに追加されますので、ここでは「FullName」とでも列の名前を変えておきます。そして[プロパティ]ウィンドウから、このFullName列のExpressionプロパティに以下の文字列を設定します。
FirstName + ' ' + LastName
これにより、FullName列にアクセスした場合には、これら2つの列の値を半角スペースで連結した値が取得できるようになります。このExpressionプロパティの記述方法についての詳細は、リファレンス・マニュアルのDataColumn.Expressionプロパティの項目をご覧ください。
社員マスタ・データテーブルでデータのプレビューを行っても、次の画面のようにFullName列の値が正しく設定されているのが分かります。
後は、ComboBoxタスクの「メンバの表示」設定欄で「FullName」を設定するようにすればOKです。設定手順は顧客名コンボボックスの場合と同様なので省略しますが、「(DataBindings)プロパティ」配下のTextプロパティで「なし」に設定しておくのを忘れないでください。
■商品名コンボボックスの設定
最後に、注文明細情報を表示しているDataGridViewコントロールでコンボボックスにより商品名が表示されるようにします。
ここではまず、DataGridViewコントロールの右上にある小さなボタンをクリックして「DataGridViewタスク」を開き、[列の追加]リンクをクリックします。これにより[列の追加]ダイアログが開きますので、[非バインド列]を選択し、名前、型、ヘッダーテキストを以下の画面のように設定します。
[追加]ボタンをクリックすると、商品名を表示するためのコンボボックス列が追加されます。
次にDataGridViewタスクで今度は[列の編集]リンクをクリックし、[列の編集]ダイアログを開きます。このダイアログでは、左側のリストでいま追加したProduct Name列を選択し、右側のプロパティ・シートで「データ」の設定を行います。
右側のプロパティ・シートで設定する内容は次の表のとおりです。
設定欄 | 設定する値 |
---|---|
DataPropertyName | ProductID |
DataSource | [他のデータ ソース]−[プロジェクト データ ソース]−[NORTHWNDDataSet]−[商品マスタ] |
DisplayMember | ProductName |
ValueMember | ProductID |
表 コンボボックス列に必要な設定内容 |
DataPropertyNameプロパティが、DataGridViewコントロールで表示されている注文明細データテーブルのレコードとコンボボックスを関連付けるための項目となります。ここにはDataGridViewコントロールのデータソース(=注文明細BindingSource)に存在する列を指定します。このプロパティは、先ほどの顧客名コンボボックスのときに設定したSelectedValueプロパティに相当すると考えてよいでしょう。
今回は設定が少し複雑だったので、作成したVisual Basic 2005のプロジェクトを用意しました。以下のリンクからダウンロードできます。
今回作成したサンプル・プログラムのダウンロード(vsdbprog_06.zip)
なお、このzipファイルにはNorthwindデータベースが含まれていません。実際に実行して試す場合には、上記zipファイルを展開すると作成されるvsdbprog_06ディレクトリにサンプル・データベースの「NORTHWND.MDF」と「NORTHWND.LDF」をコピーし、さらにNORTHWND.LDFの名前を「NORTHWND_log.ldf」に変更してからビルドしてください。
今回はマスタ/詳細テーブルを扱うデータベース・アプリケーションについて参照処理をまず作成しました。次回は更新処理を実装していきます。
Copyright© Digital Advantage Corp. All Rights Reserved.