私は Delphi 6 を使用しており、データベースにバインドされた複数選択のリスト ボックスが必要です。TListBox
、 、TDBListBox
の3 種類のリスト ボックスが見つかりましTDBLookupListBox
た。
私が理解できる限り、TListbox
データベースにバインドされていません。TDBListBox
複数選択することはTDBLookupListBox
できません。
複数選択リストボックスをデータベースにバインドする方法はありますか?
私は Delphi 6 を使用しており、データベースにバインドされた複数選択のリスト ボックスが必要です。TListBox
、 、TDBListBox
の3 種類のリスト ボックスが見つかりましTDBLookupListBox
た。
私が理解できる限り、TListbox
データベースにバインドされていません。TDBListBox
複数選択することはTDBLookupListBox
できません。
複数選択リストボックスをデータベースにバインドする方法はありますか?
データバインディング コンポーネントの問題は、コンポーネントがデータソースに依存しており、データソースにはカーソルが 1 つしかないことです。それがおそらく理由です。
ところで、データを変更する必要がありますか?それ以外の場合は、データセットから通常のリスト ボックスを埋めることができます。または、非表示のデータ リスト ボックスを使用して、その内容を通常のリスト ボックスにコピーすることもできます。
私が知る限りではありません。
標準では、1 が現在のレコードを表す一連の値をリストで提供します。
複数値を持つフィールドがない限り (ベスト プラクティスに反して)、複数選択する方法がわかりません...
または、実際に必要なのはサブテーブルですか?
TDBGridのオプションのいくつかをいじって、表示される列を制限すると、リストボックスのように見えるものを作成できます。Optionsプロパティを[dgTitles、dgTabs、dgRowSelect、dgAlwaysShowSelection、dgCancelOnExit、dgMultiSelect]に設定して、そこから作業してみてください。
DevExpress TcxDBListBox は複数選択をサポートしています。データベースにバインドされた複数選択ドロップダウンチェックボックスを使用しています。
コンポーネントには、リストとの間で変換するために実装できるメソッドがあります。EditValueToStates および StatesToEditValue。格納するデータは正規化されていませんが (セミコロンで区切られたバージョン番号のリストを格納しています)、セミコロンを区切り文字としてフィールドに全文検索インデックスを作成しましたが、今でも最適化された検索を実行できます。そのフィールドで。
TCustomListBox から派生する独自のカスタム リストボックス コンポーネントを作成し、リストに Datasource プロパティを追加し、TStrings などの別のプロパティをコンテナとして使用して選択した値を保持することができます。その後、ボタン クリックを使用してデータベースに変更を投稿できます。
TDbLookupListBoxには、2つの異なるものをデータにバインドするオプションがあります。最初にリストをデータセットにバインドでき(ListSource / ListField / KeyField)、次に選択したアイテムを別のデータセットのフィールドにバインドできます(DataSource、DataField)。アイテムのリストをデータセットにバインドし、複数の選択を手動で管理することには概念的に問題はありませんが、現在の実装では、必要な制御スタイルをサブクラス化して有効にしないと不可能だと思います。
François へのコメントに基づいて、通常の TListbox を使用してコードを記述し、すべての個別の値をリストに挿入してから、複数選択値を自分で処理します。Jeremy のソリューションも機能します。DevExpress Express Quantum Gridには優れたフィルター システムがあり、他のプログラミングを節約することさえできます。