【发布时间】:2014-11-01 02:34:10
【问题描述】:
我已经使用 TListView 制作了我的应用程序,以将主数据集显示为列表作为导航记录的方式。我已将 LiveBindings 与 Sync * 连接一起使用。
主要问题是它将整个表加载到内存中。大多数时候这很慢,现在把它带到 android 上更糟糕。
我还没有找到任何关于如何分页的示例。我没有使用 sql,我使用的是按需检索记录的自定义 DataSet (Aurelius)。
由于我没有找到任何文档,因此我没有可分享的起点或代码。
如何让TListView按需加载记录?
PS。有一个similar SO 问题,但可以通过 SQL 语句解决。我没有可用的 SQL,我想知道 FMX 的实际版本是否会是更好的方法。
【问题讨论】:
-
应该可以使用
LiveBindings来同步从数据库加载。见updating-listview-item-attributes-on-the-fly-when-using-livebindings。另请参阅Mobile Tutorial: Using LiveBindings to Populate a ListView (iOS and Android)。 -
@LURD 谢谢,我已经在使用 LiveBindings,我已经编辑了我的问题以说明这一点,因为我假设 LiveBindings 将是 FMX 的默认标准。使用 TListView 的 Sync 属性确实有效,但它加载了整个 DataSet,我希望它加载需要显示的内容,或者至少加载少量(页面)
-
致反对者:请证明您的反对票是合理的。你肯定知道我的问题的答案,因为你发现它错了。
-
与其关注控制,不如关注实际问题。我将创建一个 GUI 类来保存数据的子集并按需加载数据。然后,您可以将任何 GUI 控件绑定到此类,如果您决定用不同的控件替换
Listview,这将使生活更轻松。如果需要,您还可以在桌面应用程序上重复使用此类。 -
@eelias 这里有一篇关于 MGM(Model Gui Mediator)模式的好文章:andypatterns.com/files/… 虽然使用这种方法将有效地替换实时绑定,但我发现实时绑定缓慢且混乱。我为我的应用程序使用对象持久性框架 (tiOPF),它为大多数常见的 GUI 控件提供了中介,并且编写新的控件非常简单。
标签: delphi cross-platform firemonkey delphi-xe6 livebindings