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