1

现在我的 FMX 项目完全基于 Livebinding 将数据源连接到表单上的编辑器。

它工作得很好,除了速度慢并且不使用分页加载(TLisView)。

但是,我有许多不同的数据源,数据量可能很大,连接最终很慢。

我的想法是保持用户界面响应并让后台线程使数据加载打开数据源并将其置于正确的状态。之后将数据源分配给表单上的控件。

我用 LiveBinding 玩过它,但我不能将主线程与背景线程混合。发生了一些问题。

必须手动将每个字段记录加载到每个控件似乎是非常低效的。我几乎所有使用的控件都已打包,我基于 FMX 制作了自己的控件,因此我可以添加更多功能。

我想知道是否已经完成了一些事情。我可以用来映射源和目标的任何类或库,并且我可以在需要时激活控件,因为我可以通过线程让许多数据源处于加载状态。

4

2 回答 2

1

这不是一个真正的活生生的问题。

同样没有实时绑定,当您在线程中检索数据时,您必须尊重线程上下文。从连接中获取数据集时,此数据集也绑定到该连接,并且连接绑定到线程上下文。

解决方案是将数据集复制到 clientdataset 并将该 CDS 移交给 UI 线程。现在您可以将 CDS 绑定到您喜欢的任何位置。请记住,CDS 和数据连接之间没有连接。您必须小心自己写回更改。

于 2015-02-03T10:32:46.807 回答
1

不知道这是否仍然相关。我使用 TTask.Run 和 Thread.Queue 频繁地使用实时绑定来加载底层数据。重要的一点是要有 LiveBinding AutoActivate = FALSE(即 TLinkGridToDataBindSource 或其他 livebinding)。

请求在 TThread.Run 中完成,执行查询,并且 LiveBinding 属性“Active”在 TThread.Queue [TThread.Run 内部] 中设置为 True。Livebinding 正在更新 UI,并且必须在主线程中发生。

随后的更新/请求以相同的方式完成,首先将 active 设置为 false。

于 2020-03-02T08:38:02.550 回答