DataCombo コントロールと DataList コントロールの使用
DataCombo コントロールと DataList コントロールは、標準のリスト ボックス コントロールやコンボ ボックス コントロールと非常によく似ていますが、データベース アプリケーションで非常に適応性があり便利なものにする重要な違いがいくつかあります。どちらのコントロールも、これらのコントロールがバインドされているデータベース フィールドによって自動的に設定できます。さらに、オプションで選択したフィールドを 2 番目のデータ コントロールに渡すことができるため、「ルックアップ テーブル」アプリケーションの作成に適しています。
考えられる用途
1. リレーショナル データベースでは、1 つのテーブルのデータを使用して、2 番目の (関連する) テーブルに入力する値を提供します。たとえば、在庫データベースでは、サプライヤーの名前がテーブルに保存され、各サプライヤーは一意の識別子を持ちます。製品を示す別の表では、これらの識別子を使用して、どのサプライヤーが製品を供給しているかを示します。 DataList コントロールを使用すると、サプライヤーの識別子を製品テーブルに (目に見えないように) 提供しながら、サプライヤーの名前を表示できます。
2. ユーザーがドロップダウン リストから基準を選択して検索を絞り込めるようにします。たとえば、販売レポート データベース アプリケーションは、DataList コントロールを使用して、ユーザーが州または販売地域を選択できるようにすることができます。選択が行われると、選択内容は自動的に 2 番目のデータ コントロールに渡され、選択したエリアの販売記録を検索します。
対応する組み込みコントロールと同様、DataList コントロールと DataCombo コントロールの主な違いは、DataCombo コントロールがコンテンツを編集できるテキスト ボックスを提供することです。
DataList コントロールと DataCombo コントロールのデータベース テーブルを結合する機能の説明については、「DataCombo コントロールと DataList コントロールを使用した 2 つのテーブルの結合」を参照してください。リンク テーブルを使用する単純なデータベース アプリケーションを作成するには、「単純な DataCombo アプリケーションの作成」を参照してください。
注目すべきコントロールのプロパティ
DataList コントロールと DataCombo コントロールの重要なプロパティには次のものがあります。
DataCombo コントロールの DataFormat プロパティは Extender プロパティであることに注意してください。したがって、プロパティ シートには常に表示され、コードで設定できます。ただし、DataCombo コントロールは、リストの最上位の項目のみをフォーマットします。これは、書式設定された最上位項目が表示され、書式設定されていないリストから簡単に選択できるエンド ユーザーにとってはそれほど重要ではない可能性があります。書式設定されたアイテムは、アイテムがデータベースに入力される前に書式設定されているとエンド ユーザーに誤解させる可能性もあります。これらの理由から、DataCombo コントロールを使用する場合は、DataFormat プロパティを設定しないことをお勧めします。
詳細BoundText プロパティの使用方法を示すステップバイステップのチュートリアルについては、「接続された DataList コントロールを使用した DataGrid の作成」を参照してください。これらのコントロールのプロパティとメソッドの完全なリストについては、「DataList コントロール」および「DataCombo コントロール」を参照してください。
DataCombo コントロールと DataList コントロールを使用して 2 つのテーブルを接続する
DataCombo コントロールと DataList コントロールの際立った機能は、2 つの異なるテーブルにアクセスし、最初のテーブルのデータを 2 番目のテーブルのフィールドにリンクできることです。これは、2 つのデータ ソース (ADOData コントロールやデータ環境など) を使用して行われます。
リレーショナル テーブルと「不親切な」値
リレーショナル データベースでは、再利用できるすべての情報が複数の場所に保存されるわけではありません。この情報のほとんどは、複数のフィールドで構成されるレコードセットに格納されます。これらのフィールドの中には、レコードセットを一意に識別する「識別子」フィールドがあります。たとえば、Visual Basic が提供する Biblio データベースは、Publishers というテーブルに複数の出版社の名前を格納します。このテーブルには、住所、市区町村、郵便番号、電話番号などの多くのフィールドが含まれています。ただし、簡単にするために、このテーブルの 2 つの必須フィールド、Name と PubID のみを考慮します。 Name フィールドには発行者の名前が格納されますが、PubID フィールドには数値やコードなどの比較的「不親切な」値が格納されます。ただし、この不親切な値は発行者を一意に識別し、レコード セット全体をリンクする手段として機能するため、重要です。さらに、この値は 2 番目のテーブルの複数のレコードセットに保存されます。
2 番目のテーブルの名前は Titles で、各レコード セットにはタイトル、出版年、国際標準書籍番号 (ISBN) などの情報が含まれています。これらのフィールドの 1 つの名前は PubID です。このフィールドには、このタイトルを特定の発行者にリンクする値が格納されるため、このフィールドの名前は、Publishers テーブルの対応するフィールドと同じです。
この考えられる解決策には小さな問題があります。ユーザーが新しいタイトルを挿入できるデータベース アプリケーションを使用すると、ユーザーは発行者を識別する整数を何らかの方法で入力する必要があります。ユーザーが各発行者の一意の識別子を覚えている場合はまだ実現可能ですが、ユーザーが発行者の名前を確認でき、対応する値がデータベースに保存されている場合は、より便利に見えます。 DataList コントロールと DataCombo コントロールを使用すると、この問題を簡単に解決できます。
2 つのデータ ソース、3 つのフィールド、エンコーディングなし
DataList コントロールと DataCombo コントロールは、2 つのデータ ソースを使用してこの問題を解決します。 (Publishers テーブルからの) 発行者の名前のみを表示する一方で、DataList または DataCombo コントロールは、PubID フィールドの値のみを Titles テーブルに書き込みます。 [プロパティ] ウィンドウで、書き込むデータを提供するデータ ソース (つまり、Publishers テーブル) に RowSource を設定します。次に、DataSource プロパティを、データが書き込まれるデータ ソース (つまり、Titles テーブル) に設定します。最後に、DataField、ListField、および BoundColumn プロパティを設定します。次の図は、2 つのデータ ソース (2 つのデータ コントロールの形式) と 3 つのフィールドを DataCombo コントロールに割り当てる方法を示しています。
簡単に言うと、ListField プロパティは、コントロールによってどのフィールドが表示されるかを決定します。この場合は発行者の名前です。一方、BoundColumn プロパティは、Publishers テーブルのどのフィールドが実際に必要な値を Title テーブルに提供するかを決定します。 Publishers テーブルの PubID フィールドは編集できない (編集すべきではない) ことに注意してください。代わりに、PubID フィールドの値が DataField プロパティで指定されたフィールドに書き込まれます。この例では、この属性は Titles テーブルの PubID フィールドです。
次の表に、これらのプロパティの概要とその使用方法を示します。
DataList コントロールと DataCombo コントロールは、単一のデータ コントロールとともに使用することもできることに注意してください。これを実現するには、DataSource プロパティと RowSource プロパティを同じデータ コントロールに設定し、DataField プロパティと BoundColumn プロパティをデータ コントロールのレコードセット内の同じフィールドに設定します。この場合、リストには、更新される同じレコードセットからの ListField 値が設定されます。 ListField プロパティが指定されているが、BoundColumn プロパティが設定されていない場合、BoundColumn は自動的に ListField フィールドに設定されます。
詳細DataCombo コントロールを使用して単純なデータベース アプリケーションを段階的に作成する場合は、「単純な DataCombo アプリケーションの作成」を参照してください。
->