方法: Windows フォーム ComboBox、ListBox、または CheckedListBox コントロールのルックアップ テーブルを作成する

Windows フォーム上ではわかりやすい形式でデータを表示し、一方プログラムにはより意味のある形式でデータを格納すると便利な場合があります。 たとえば、食品の注文書の場合、リスト ボックスにメニュー項目が名前で表示されます。 一方、注文を記録するデータ テーブルには、食品を表す一意の ID 番号が含まれることになります。 次の表は、食品の注文書データを格納および表示する方法の例を示しています。

OrderDetailsTable

OrderID ItemID Quantity
4085 12 1
4086 13 3

ItemTable

id 名前
12 ポテト
13 チキン

このシナリオでは、表示と保存に関係する実際の情報が、OrderDetailsTable という 1 つのテーブルに格納されます。 しかし、スペースを節約するために、これはかなり謎めいた方法で実行されます。 もう一方のテーブル ItemTable には、どの ID 番号がどの食品名に相当するかという表示関連の情報のみが含まれ、実際の食品の注文についての情報はありません。

ItemTable は、3 つのプロパティを介して ComboBoxListBox、または CheckedListBox コントロールに接続されます。 DataSource プロパティには、このテーブルの名前が含まれます。 DisplayMember プロパティには、コントロール (食品名) に表示する、そのテーブルのデータ列が含まれます。 ValueMember プロパティには、情報 (ID 番号) が格納される、そのテーブルのデータ列が含まれます。

OrderDetailsTable は、DataBindings プロパティを介してアクセスされる、そのバインディング コレクションによってコントロールに接続されます。 バインディング オブジェクトをコレクションに追加すると、データ ソース (OrderDetailsTable) 内の特定のデータ メンバー (ID 番号の列) にコントロール プロパティが接続されます。 コントロールで選択がなされる際、このテーブルはフォーム入力が保存される場所です。

ルックアップ テーブルを作成するには

  1. フォームに ComboBoxListBox、または CheckedListBox コントロールを追加します。

  2. データ ソースに接続します。

  3. 2 つのテーブル間のデータ リレーションシップを確立します。 「DataRelation オブジェクトの概要」を参照してください。

  4. 次のプロパティを設定します。 これらはコードまたはデザイナーで設定できます。

    プロパティ 設定
    DataSource どの ID 番号がどの項目に相当するかについての情報を含むテーブル。 上記のシナリオでは、これは ItemTable です。
    DisplayMember コントロールに表示するデータ ソース テーブルの列。 上記のシナリオでは、これは "Name" です (コードで設定する場合は引用符を使用)。
    ValueMember 格納された情報を含むデータ ソース テーブルの列。 上記のシナリオでは、これは "ID" です (コードで設定する場合は引用符を使用)。
  5. プロシージャで ControlBindingsCollection クラスの Add メソッドを呼び出して、フォーム入力を記録するテーブルにコントロールの SelectedValue プロパティをバインドします。 この操作は、コードでなくデザイナーでも可能です。その場合は、 [プロパティ] ウィンドウでコントロールの DataBindings プロパティにアクセスします。 上記のシナリオでは、これは OrderDetailsTable であり、列は "ItemID" です。

    ListBox1.DataBindings.Add("SelectedValue", OrderDetailsTable, "ItemID")  
    
    listBox1.DataBindings.Add("SelectedValue", OrderDetailsTable, "ItemID");  
    

関連項目