4


2

Delphi 6のデータベースにバインドされた複数選択リストボックス

私はDelphi 6を使用しています、そして私は複数選択を持つデータベースバウンドリストボックスが欲しいです。 私は3種類のリストボックスを見つけました: TListBox、` TDBListBox`と TDBLookupListBox

私が理解できる限り、 TListbox`はデータベースに縛られていません。 `TDBListBox`と TDBLookupListBox`は複数選択することはできません。

複数選択リストボックスをデータベースにバインドする方法はありますか?

7 Answer


3


データバインディングコンポーネントの問題は、それらがデータソースに依存し、データソースが単一のカーソルしか持たないことです。 それがおそらくその理由です。

ところで、あなたはデータを変更する必要がありますか? そうでなければ、データセットから通常のリストボックスを埋めることができます。 あるいは、目に見えないデータリストボックスを使用してその内容を通常のリストボックスにコピーすることもできます。


3


私の知る限りではない。 標準では、リストに1が現在のレコードを表す一連の値を提供します。 あなたが(ベストプラクティスに反して)多値のフィールドを持っていない限り、私はあなたがどのように多選択をすることができるのか見られない…​

それともあなたが望むかもしれないものは実際にはサブテーブルですか?


1


DevExpress TcxDBListBoxは複数選択をサポートしています。 私はデータベースにバインドされた彼らの複数選択ドロップダウンチェックボックスを使用します、それは甘いです。

コンポーネントには、リストとの間で変換を行うために実装できるメソッドがあります。 EditValueToStatesおよびStatesToEditValue。 格納するデータが正規化されていない(バージョン番号のセミコロンで区切られたリストを格納する)一方、セミコロンを区切り文字としてフィールドにフルテキスト検索インデックスを作成しましたが、今でも最適化検索を実行できます。その分野で。


1


TCustomListBoxから派生する独自のカスタムリストボックスコンポーネントを作成し、リストのDatasourceプロパティと、選択された値を保持するためのコンテナとして使用されるTStringsなどの別のプロパティを追加できます。 ボタンをクリックしてデータベースに変更を投稿することができます。


1


TDBGridのいくつかのオプションをいじって表示する列を制限すると、リストボックスのように見えるものを作成できます。 Optionsプロパティをに設定してみてください

そしてそこから働きます。


0


TDbLookupListBoxでは、2つの異なることをデータにバインドすることができます。最初にリストをデータセット(ListSource / ListField / KeyField)にバインドし、次に選択した項目を別のデータセット(DataSource、DataField)のフィールドにバインドできます。 項目のリストをデータセットにバインドしてから手動で複数の選択を管理したいという概念的な問題はありませんが、現在の実装ではサブクラス化して必要なコントロールスタイルを有効にしなくては不可能です。


0


Françoisへのあなたのコメントに基づいて、私は通常のTListboxを使用してリストにすべての異なる値を挿入するコードを書き、そしてそれからあなた自身で複数選択の値を処理するでしょう。 Jeremyのソリューションも機能し、 DevExpress Express Quantum Gridには、他のプログラミングを節約するための優れたフィルタシステムがあります。