none
データ連結したコンボボックスで、表示用の値とデータ連結に使用する値を使い分けたい RRS feed

  • 質問

  • ・概要

     

    「商品コード」フィールドに連結したコンボボックスを、ユーザには「商品名」で操作させたいのですが、プロパティの設定方法が分かりません。

     

    ・状況/希望

    VB2005 Express Edition

     

    db.mdbに以下のテーブルがあります。
      取引テーブル … 取引No, 商品コード, 単価
      商品マスタ … 商品コード, 商品名

     

    商品マスタにはデータを入れておきます。
      (商品コード, 商品名) = (10, 鉛筆) (20, ボールペン)

     

    以下の「取引入力画面」に入力することで、取引テーブルにレコードが作成されていくようにします。
    取引入力画面
     取引No … テキストボックス
     商品名 … コンボボックス
     単価  … テキストボックス

     

    この「取引入力画面」を以下の手順で作ります。

    (データソースからドラッグアンドドロップで落とす方法です)
     ・WindowsApplication1 を新規に作成
     ・新しいデータソース db.mdb を追加
     ・データソースウィンドウの「取引テーブル」のプルダウンを開き、「詳細」に設定する
     ・データソースウィンドウの「取引テーブル」のフィールド「商品コード」のプルダウンを開き、ComboBox に設定する
     ・データソースウィンドウの「取引テーブル」をドラッグアンドドロップし、Form1 上に落とす
     ・ラベル「商品コード」の見出しを「商品名」に修正する
     ・商品名を入力するコンボボックスのプロパティを以下のように設定する
      (1. DataBindings の Text は既に 「取引テーブルBindingSource - 商品コード」と設定されているが、これは触らない。)
      2. DataSource プルダウンから「商品マスタ」を選ぶ。「商品マスタBindingSource」が自動生成され、これがDataSourceとなる。
      3. DisplayMember には「商品名」を設定する。

     

    この状態でプログラムを実行し、以下の操作をします。
     ・ナビゲータの+ボタンを押し新規レコード作成モードに入る
     ・以下を入力する
      取引No…1
      商品名…鉛筆 ※プルダウンを開くと「鉛筆」「ボールペン」が期待どおり表示される
      単価…100
     ・保存ボタンを押す
     ・その状態のまま db.mdb を開いて取引テーブルを確認する

     

     すると、確かにレコードは作成されているのですが、「商品コード」フィールドには「鉛筆」と入っており、期待する「10」になっていません。

    どのようにプロパティを設定すれば期待通りの動作をさせることができるのでしょうか?

    2007年5月5日 10:57

回答

  •  yuki-m さんからの引用

      (1. DataBindings の Text は既に 「取引テーブルBindingSource - 商品コード」と設定されているが、これは触らない。)
     

    試していませんが、ここがTextではなく、SelectedValueじゃないでしょうか?
    2007年5月6日 19:28
    モデレータ

すべての返信

  • コンボボックスのValueMemberはどうなっていますか?
    2007年5月5日 12:18
    モデレータ
  • ValueMember は空白(なし)になっています。

     

    試しにこれを「商品コード」および「商品名」に設定してみると、結果はなにも設定しない時と同じく、いずれも「商品名」が取引テーブルに書き込まれています。

    2007年5月5日 22:59
  •  yuki-m さんからの引用

      (1. DataBindings の Text は既に 「取引テーブルBindingSource - 商品コード」と設定されているが、これは触らない。)
     

    試していませんが、ここがTextではなく、SelectedValueじゃないでしょうか?
    2007年5月6日 19:28
    モデレータ
  • (ValueMember を「商品コード」にして)SelectedValue にすると希望通りの動作になりました。
    ざっと触ってみたところでは大丈夫な感じです。ありがとうございました。

     

    # 設定の要約です
    SelectedValue 取引テーブルBindingSource - 商品コード
    Text なし
    DataSource 商品マスタBindingSource
    DisplayMember 商品名
    ValueMember 商品コード

    2007年5月7日 2:56