我需要呈现大量的行数据(即。数百万行)在一个网格中使用JavaScript传递给用户。

用户不应该一次只查看页面或有限数量的数据。

相反,应该显示所有数据都是可用的。

不同于一次性下载所有数据,小块数据是在用户访问它们时下载的。通过滚动网格)。

行不会通过前端进行编辑,因此只读网格是可以接受的。

对于这种无缝分页,存在哪些用JavaScript编写的数据网格?


当前回答

我能想到的最佳方法是在每次滚动或滚动结束前以json格式加载数据块。Json可以很容易地转换为对象,因此可以很容易地不引人注目地构造表行

其他回答

datagrid提供了数据的JS抽象,因此您可以使用所提供的dojo将其连接到各种后端。数据存储或自己编写。显然,您需要一个支持对这么多记录进行随机访问的系统。DataGrid还提供了完全的可访问性。

请编辑,这里有一个指向Matthew Russell文章的链接,该文章应该会提供您所需要的示例,使用dojox.grid查看数百万条记录。注意,它使用了旧版本的网格,但概念是相同的,只是有一些不兼容的API改进。

哦,它是完全免费的开源软件。

我建议你读一读

http://www.sitepen.com/blog/2008/11/21/effective-use-of-jsonreststore-referencing-lazy-loading-and-more/

(免责声明:我是SlickGrid的作者)

更新 这已经在SlickGrid中实现了。

有关如何使SlickGrid工作于大量行的讨论,请参阅http://github.com/mleibman/SlickGrid/issues#issue/22。

The problem is that SlickGrid does not virtualize the scrollbar itself - the scrollable area's height is set to the total height of all the rows. The rows are still being added and removed as the user is scrolling, but the scrolling itself is done by the browser. That allows it to be very fast yet smooth (onscroll events are notoriously slow). The caveat is that there are bugs/limits in the browsers' CSS engines that limit the potential height of an element. For IE, that happens to be 0x123456 or 1193046 pixels. For other browsers it is higher.

在“large -fix”分支中有一个实验性的解决方案,通过将可滚动区域的“页面”设置为1M像素的高度,然后在这些页面中使用相对定位,可以显著提高该限制。由于CSS引擎中的高度限制似乎不同,而且明显低于实际的布局引擎,这给了我们一个更高的上限。

我仍在寻找一种方法,在不放弃SlickGrid目前相对于其他实现的性能优势的情况下实现无限行的数量。

吕迪格,你能详细解释一下你是怎么解决的吗?

我可以非常肯定地说,您确实不需要向用户显示数百万行数据。

世界上没有任何用户能够理解或管理该数据集,因此即使您在技术上设法实现了它,也无法为该用户解决任何已知问题。

相反,我将关注用户为什么想要查看数据。用户不希望看到数据只是为了看到数据,通常会有一个问题被提出。如果你专注于回答这些问题,那么你就会更接近解决实际问题的方法。

我有点看不到这一点,对于jqGrid,你可以使用虚拟滚动功能:

http://www.trirand.net/aspnetmvc/grid/performancevirtualscrolling

但话又说回来,数百万行的过滤可以完成:

http://www.trirand.net/aspnetmvc/grid/performancelinq

我真的不明白“好像没有书页”的意义,我的意思是……没有办法在浏览器中一次显示1,000,000行——这是10MB的原始HTML,我有点不明白为什么用户不想看到这些页面。

无论如何……