TDBルックアップコンボボックス
FireMonkey でTDBLookupCombobox機能を再現するのを手伝ってくれる人はいますか?
FireMonkey でTDBLookupCombobox機能を再現するのを手伝ってくれる人はいますか?
より良い解決策があるかどうかはわかりませんが、これが私がしていることです:
Table2 への外部キーを持つ Table1 があるとします。
Text
プロパティに Table2 のルックアップ フィールドを入力し、そのTag
プロパティに Table2 の主キーを入力します。Selected.Tag
Table1 の外部キーと一致させます。編集:
TBindList と TBindPosition の SourceComponent プロパティを確認してください。
TBindList は、Table2 の BindScopeDB を指す必要があります。
代わりに、TBindPosition を Table1 の BindScopeDB に設定します。
ControlComponent は、両方の TComboBox を指す必要があります。
TBindList を使用すると、Format
コレクション式は ComboBox 内の 1 つの項目を参照します。これは、Table2 内のすべての行を循環してコントロールを埋めるためです。したがって、ControlExpressions は各項目のプロパティです。
Text
、
Tag
注:必要ありませんSelected
およびこれらの SourceExpressions:
FieldByName(LookedUpField).AsString
、
FieldByName(PK).AsInteger
これらの式をFormat
コレクションに入れます。
代わりに、TBindPosition は常に ComboBox 全体を参照するため、 を使用する必要がありますSelected
。制御式:
Selected.Tag
SelectedText(Self)
、
ソース式:
FieldByName(FK).AsInteger
、
FieldByName(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 に含まれている例を探してください。
これが少し役立ったことを願っています。