有人可以帮我在FireMonkey中复制 TDBLookupCombobox 功能吗?
答案 0 :(得分:2)
我不知道是否有更好的解决方案,但这就是我所做的:
假设您的Table1具有Table2的外键。
Text
属性
在Table2中查找字段并用{填充Tag
属性
表2的主键。 Selected.Tag
。编辑:
检查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
集合中。
Selected
。
ControlExpressions:
Selected.Tag
SelectedText(Self)
,
SourceExpressions:
FieldByName(FK).AsInteger
,
FieldByName(LookupField).AsString
请记住,PosSource
集合用于设置“ControlExpressions TO SourceExpressions”分配,而PosControl
包含“SourceExpressions to ControlExpressions”分配。
基本上你需要做两件事:当Table1光标改变时更改你选择的项目,并在用户更改时使用所选项目的Tag属性设置你的FK。
所以只需将它们放在你的PosControl系列中:
SelectedText(Self)
ControlExpression
FieldByName(LookupField).AsString
SourceExpression
和你的PosSource集合中的这些:
Selected.Tag
ControlExpression
FieldByName(FK).AsInteger
SourceExpression
如果要对TDBLookupComboBox进行类似的行为,则必须在更改所选组合框项目时将表置于编辑状态。
几个月前,当我尝试使用Firemonkey时,我需要更多表达式来更新StringGrid中显示的相同字段,但我不知道是否有更好的解决方案。希望其他人可以回答并分享他的经验。
有关更多信息,请查看XE2中包含的示例。
希望这有点帮助。