delphi - TDBLookupCombobox FireMonkey

标签 delphi delphi-xe2 firemonkey livebindings

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/

相关文章:

ios - 如何访问存储在\StartUp\Documents\中的文件?

ios - 如何在 Xcode 中调试 Delphi iOS FireMonkey 应用程序?

德尔福 10.1 柏林 : SOAP Abstract Error

delphi - 从 Delphi 6 调用时,用 Delphi 10 编写的 DLL 会出现访问冲突

德尔福XE2 : Convert a ASM method for Win64 platform

multithreading - 当线程中有无限循环时如何获得最低的CPU消耗

delphi - 如何制作与 Outlook 2013 相同的列表框?

algorithm - 在 Delphi 中快速填充字符串

delphi - 放大/缩小 TScrollBox 内的 TImage 到特定焦点?

delphi - 允许对嵌套在 FireMonkey TPopup 内的 FireMonkey TEdit 进行键盘输入