TDBLookupCombobox
谁能帮我在 FireMonkey 中重现TDBLookupCombobox功能?
谁能帮我在 FireMonkey 中重现TDBLookupCombobox功能?
我不知道是否有更好的解决方案,但这就是我所做的:
假设您有 Table1 和 Table2 的外键。
Text
Table2 中的查找字段填充 Combobox 的属性,并用 Table2Tag
的主键填充属性。Selected.Tag
Table1 中的外键进行匹配。编辑:
检查 TBindList 和 TBindPosition 的 SourceComponent 属性。
TBindList 应该指向 Table2 的 BindScopeDB。
而是将 TBindPosition 指向 Table1 的 BindScopeDB。
ControlComponent 应该指向你的 TComboBox 。
当您使用 TBindList 时,Format
集合表达式引用 ComboBox 内的单个项目,因为它循环为 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
集合用于设置“ControlExpressions TO SourceExpressions”分配,同时PosControl
包含“SourceExpressions TO ControlExpressions”分配。
基本上你需要两件事:当 Table1 光标改变时改变你选择的项目,并在用户改变它时使用所选项目的 Tag 属性设置你的 FK。
因此,只需将这些放在您的 PosControl 集合中:
SelectedText(Self)
控制表达式
FieldByName(LookupField).AsString
源表达式
这些在您的 PosSource 集合中:
Selected.Tag
控制表达式
FieldByName(FK).AsInteger
源表达式
如果要使 TDBLookupComboBox 具有类似的行为,则必须在更改选定的组合框项时将表置于编辑状态。
当我几个月前尝试 Firemonkey 时,我需要更多表达式来更新 StringGrid 中显示的相同字段,但我不知道是否有更好的解决方案。希望其他人可以回答并分享他的经验。
有关更多信息,请查找 XE2 中包含的示例。
希望这会有所帮助。