2

TDBルックアップコンボボックス

FireMonkey でTDBLookupCombobox機能を再現するのを手伝ってくれる人はいますか?

4

1 に答える 1

2

より良い解決策があるかどうかはわかりませんが、これが私がしていることです:

Table2 への外部キーを持つ Table1 があるとします。

  • 外部キーを使用して Table1 にルックアップ フィールドを作成します。
  • TBindList を使用して、Combobox のTextプロパティに Table2 のルックアップ フィールドを入力し、そのTagプロパティに Table2 の主キーを入力します。
  • TBindPosition を使用して、選択したテキストをルックアップ フィールドおよびSelected.TagTable1 の外部キーと一致させます。

編集:

TBindList と TBindPosition の SourceComponent プロパティを確認してください。

TBindList は、Table2 の BindScopeDB を指す必要があります。

代わりに、TBindPosition を Table1 の BindScopeDB に設定します。

ControlComponent は、両方の TComboBox を指す必要があります。

TBindList を使用すると、Formatコレクション式は ComboBox 内の 1 つの項目を参照します。これは、Table2 内のすべての行を循環してコントロールを埋めるためです。したがって、ControlExpressions は各項目のプロパティです。

TextTag

注:必要ありませんSelected

およびこれらの SourceExpressions:

FieldByName(LookedUpField).AsStringFieldByName(PK).AsInteger

これらの式をFormatコレクションに入れます。

代わりに、TBindPosition は常に ComboBox 全体を参照するため、 を使用する必要がありますSelected。制御式:

Selected.Tag SelectedText(Self)

ソース式:

FieldByName(FK).AsIntegerFieldByName(LookupField).AsString

PosSourceコレクションは、「SourceExpressions TO ControlExpressions」割り当てを含む一方で、「ControlExpressions TO SourceExpressions」割り当てを設定するために使用されることに注意してくださいPosControl

基本的には、Table1 カーソルが変更されたときに選択した項目を変更し、ユーザーが変更したときに選択した項目の Tag プロパティを使用して FK を設定するという 2 つのことが必要です。

これらを PosControl コレクションに入れるだけです。

SelectedText(Self)制御式

FieldByName(LookupField).AsStringソース式

これらは PosSource コレクションにあります。

Selected.Tag制御式

FieldByName(FK).AsIntegerソース式

TDBLookupComboBox と同様の動作をさせたい場合は、選択したコンボボックス項目が変更されたときに、テーブルを編集状態にする必要があります。

数か月前に Firemonkey を試したとき、StringGrid に表示されている同じフィールドを更新するためにより多くの式が必要でしたが、それに対するより良い解決策があるかどうかはわかりません。他の誰かが答えて、これについての彼の経験を共有できることを願っています.

詳細については、XE2 に含まれている例を探してください。

これが少し役立ったことを願っています。

于 2012-04-19T09:16:54.390 に答える