TDBLookupCombobox
任何人都可以帮助我在 FireMonkey 中重现 TDBLookupCombobox 功能吗?
最佳答案
我不知道是否有更好的解决方案,但这就是我所做的:
假设您有表 1 和表 2 的外键。
- 使用外键在 Table1 中创建查找字段。
- 使用 TBindList 填充 Combobox 的
Text
属性 在 Table2 中查找字段并用以下内容填充Tag
属性 表2的主键。 - 使用 TBindPosition 将所选文本与
查找字段和
Selected.Tag
以及表 1 中的外键。
编辑:
检查 TBindList 和 TBindPosition 的 SourceComponent 属性。
TBindList 应指向 Table2 的 BindScopeDB。
TBindPosition 改为 Table1 的 BindScopeDB。
ControlComponent 应该指向您的 TComboBox。
当您使用 TBindList 时,Format
集合表达式引用 ComboBox 内的单个项目,因为它会循环遍历 Table2 中的每一行来填充控件。所以 ControlExpressions 是每个项目的属性:
文本
,
标签
注意:您不需要Selected
以及这些 SourceExpressions:
FieldByName(LookedUpField).AsString
,
FieldByName(PK).AsInteger
将这些表达式放入 Format
集合中。
TBindPosition 相反,始终引用整个 ComboBox,因此您需要使用 Selected
。
控制表达式:
选定的标签
选定文本(自己)
,
源表达式:
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 附带的示例。
希望这对您有所帮助。
关于delphi - TDBLookupCombobox FireMonkey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10211668/