TDBLookupCombobox FireMonkey

时间:2012-04-18 14:34:52

标签: delphi delphi-xe2 firemonkey livebindings

TDBLookupCombobox

有人可以帮我在FireMonkey中复制 TDBLookupCombobox 功能吗?

1 个答案:

答案 0 :(得分:2)

我不知道是否有更好的解决方案,但这就是我所做的:

假设您的Table1具有Table2的外键。

  • 使用外键在Table1中创建一个查找字段。
  • 使用TBindList用Comboox填充Combobox的Text属性 在Table2中查找字段并用{填充Tag属性 表2的主键。
  • 使用TBindPosition将所选文本与。匹配 使用表1中的外键查找字段和Selected.Tag

编辑:

检查TBindList和TBindPosition的SourceComponent属性。

TBindList应该指向Table2的BindScopeDB。

TBindPosition,而不是Table1的BindScopeDB。

ControlComponent应指向您的TComboBox。

当您使用TBindList时,Format集合表达式引用ComboBox中的单个项目,因为它会循环Table2中的每一行以填充控件。所以ControlExpressions是每个项目的属性:

TextTag

注意:您不需要Selected

和这些SourceExpressions:

FieldByName(LookedUpField).AsStringFieldByName(PK).AsInteger

将这些表达式放在Format集合中。

相反,TBindPosition总是指整个ComboBox,因此您需要使用Selected。 ControlExpressions:

Selected.Tag SelectedText(Self)

SourceExpressions:

FieldByName(FK).AsIntegerFieldByName(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中包含的示例。

希望这有点帮助。