【发布时间】:2013-07-30 22:33:12
【问题描述】:
我有一个 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。这远远低于预期的行数。
此时从数据源返回的所有数据都是正确的。有趣的是,单击最后一行并使用键盘上的向下箭头滚动效果很好,这对我来说再次强调了这是一个滚动条问题。
【问题讨论】:
-
听起来像是某种溢出/内存问题。您是否收到任何警告/错误?
-
我忘了说,没有错误,没有溢出,没有什么异常。通过 REST 传输的数据只是分页时数百万条记录的一个子集。一般来说,它只返回大约 60 条记录,这是我所期望的。问题是 ListGrid 没有正确处理它。
-
要检查的几件事:totalRows 的值(必须大于 endRow - +10 - 触发正确的滚动拇指大小),从服务器获取和返回的记录数,接收到客户端的记录数, 每个页面请求的开始和结束期间的开始/结束/总行值
-
@Sithsu 为什么 totalRows 需要大于 endRow?获取的记录数始终与请求的数量相匹配。然而,获取并返回给客户端的行并不总是与 ListGrid 中实际出现的数字相匹配。
标签: java gwt smartgwt listgrid