我有一个SmartGWT ListGrid,其中包含16个字段,每个字段包含字符串。网格附加到通过REST提供的数据源。当数据源中的数据量很大时,我遇到了问题。
当处理非常小的数字时没有问题,即使处理200,000条记录仍然没有问题。然而,当涉及到更大的数据集时,例如我之前尝试的数据集有260万条记录,网格只显示前850,000条(近似)记录,然后拒绝进一步分页。更奇怪的是,当我的数据源有大约2000万条记录时,网格只显示前20条记录,然后根本拒绝翻页。
Strangley我可以使用isc.showConsole()看到我的RPC响应中返回的数据。并且可以看到它正在返回正确的数据,实际上即使它返回64个有效记录,它也只显示前20个.eotalRecords正确返回为2000万,但它只是不会页面。
我的网格设置如下
ListGrid grid = new ListGrid();
DataSource ds = Application.getMyDataSource();
grid.setCriteria(new Criteria("someid", 627263));
grid.setDataSource(ds);
grid.setAutoFetchData(true);
我的数据源设置正确,因为它可以在较小的数据集上完美运行,每个字段都是作为DataSourceTextField创建的。
服务器端接受incomming请求,查找someid进来,检查_startRow,_endRow参数找到那些行(我没有使用数据库)并手动设置startRow,endRow和totalRow字段。 / p>
当我检查返回的数据时数据是否正确但网格拒绝正确显示它。
我错过了什么?列表网格是否有最大大小?从我所看到的,他们应该处理数百万条记录,但我似乎完全失败了。
修改
进一步检查后,SmartGWT处理滚动条大小的方式似乎是错误的。我不知道如何解决这个问题。
当滚动到表格底部应该是一个230万行表时,显示的最后一行是894,785。这远远不足预期的行数。
此时从数据源返回的所有数据都是正确的。有趣的是,单击最后一行并使用键盘上的向下箭头滚动工作正常,这对我来说重新强调它是一个滚动条问题。
答案 0 :(得分:0)
为了使渐进式加载工作,必须欺骗网格以指示有更多数据。
由于我们不想在仅使用数据获取150时绘制1000个空记录(实际的totalRows),我们需要设置totalRows = 160
或其他东西来生成足够接近的滚动缩略图大小,以及允许滚动150条以下的记录,以触发下一页的渐进式加载。
检查:
Paging and total dataset length in ResultSet
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检查的内容。
最后一个帖子也表明了浏览器和大型数据集的问题。