【问题标题】:TDBLookupCombobox FireMonkeyTDBLookupCombobox FireMonkey
【发布时间】:2012-04-29 23:58:35
【问题描述】:

TDBLookupCombobox

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

【问题讨论】:

  • 我自己能做到的只有: 1. 填充 ComboBox 2. BindPosition 及其 DataSet 光标 3. 它写入其 DataSet 的主键而不是文本等效项。但我不知道如何将组合框(或其数据集)的位置与存储在数据库中的值绑定。

标签: delphi delphi-xe2 firemonkey livebindings


【解决方案1】:

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

假设您有 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 中包含的示例。

希望这会有所帮助。

【讨论】:

  • 我卡在同一个地方,无法从 Table1 中提取外键。 Selected.Tag 绑定似乎不起作用。我试图做Combobox1.Selected.Tag:=37;,显然,它不起作用。我认为 TBindPosition 是做同样的事情,不是吗?氙气,请您提供一些已实施的来源吗?还是我哪里错了?
  • 我们需要将Table1的值绑定到Dataset.Locate('id', *table1 value here*, []);,但不知道livebindigs能做到吗?
猜你喜欢
  • 2023-04-11
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2014-09-28
  • 2011-11-21
  • 2014-01-09
相关资源
最近更新 更多