2

我有一个 SmartGWT ListGrid,其中包含 16 个字段,每个字段都包含字符串。网格附加到通过 REST 提供的数据源。当数据源中的数据量很大时,我会遇到问题。

处理非常小的数字时没有问题,即使处理 200,000 条记录也没有问题。然而,当涉及到更大的数据集时,例如我之前尝试过的一个有 260 万条记录,网格仅显示前 850,000 条(近似)记录,然后拒绝进一步分页。更奇怪的是,当我的数据源有大约 2000 万条记录时,网格只显示前 20 条,然后根本拒绝分页。

Strangley 我可以使用 isc.showConsole(); 在我的 RPC 响应中看到返回的数据;并且可以看到它正在返回正确的数据,实际上即使它返回 64 条有效记录,它也只显示前 20 条。totalRecords 正确返回为 2000 万,但它只是不会分页。

我的网格设置如下

ListGrid grid = new ListGrid();
DataSource ds = Application.getMyDataSource();
grid.setCriteria(new Criteria("someid", 627263));
grid.setDataSource(ds);

grid.setAutoFetchData(true);

我的数据源设置正确,因为它可以在较小的数据集上完美运行,每个字段都创建为 DataSourceTextField。

服务器端接受传入请求,查找传入的 someid,检查 _startRow、_endRow 参数找到这些行(我没有为此使用数据库)并手动设置 startRow、endRow 和 totalRow 字段。

当我检查返回的数据时,数据是正确的,但网格拒绝正确显示它。

我错过了什么?列表网格有最大尺寸吗?据我所见,他们应该处理数百万条记录,但我的似乎完全失败了。

编辑

经过进一步检查,SmartGWT 处理滚动条大小的方式似乎存在错误。我现在不知道如何解决这个问题。

当滚动到应该是 230 万行的表格的底部时,显示的最后一行是 894,785。这远远低于预期的行数。

此时从数据源返回的所有数据都是正确的。有趣的是,单击最后一行并使用键盘上的向下箭头滚动效果很好,这对我来说再次强调了它是滚动条问题的观点。

4

1 回答 1

0

为了使渐进式加载起作用,必须以某种方式欺骗网格以指示有更多数据。

由于我们不想在仅获取 150 条数据时绘制 1000 条空记录(实际 totalRows),因此我们需要设置totalRows = 160或其他东西来生成足够接近的滚动拇指大小,并允许滚动低于 150 条记录,以触发渐进式加载下一页。

检查:
结果集中的分页和总数据集长度
http://forums.smartclient.com/showthread.php?t=516
http://forums.smartclient.com/showthread.php?t=2750

当您将滚动拇指拖到底部太快时,网格可能会“智能地”跳过加载中间行。

ListGrid.showAllRecords可能是您需要根据http://forums.smartclient.com/showthread.php?t=23638检查的内容。

最后一个线程还表明浏览器和大型数据集存在问题。

于 2013-07-30T14:33:12.163 回答