2

TDBLookupCombobox

谁能帮我在 FireMonkey 中重现TDBLookupCombobox功能?

4

1 回答 1

2

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

假设您有 Table1 和 Table2 的外键。

  • 使用外键在表 1 中创建一个查找字段。
  • 使用 TBindList 用TextTable2 中的查找字段填充 Combobox 的属性,并用 Table2Tag的主键填充属性。
  • 使用 TBindPosition 将所选文本与查找字段和Selected.TagTable1 中的外键进行匹配。

编辑:

检查 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 中包含的示例。

希望这会有所帮助。

于 2012-04-19T09:16:54.390 回答