我需要呈现大量的行数据(即。数百万行)在一个网格中使用JavaScript传递给用户。
用户不应该一次只查看页面或有限数量的数据。
相反,应该显示所有数据都是可用的。
不同于一次性下载所有数据,小块数据是在用户访问它们时下载的。通过滚动网格)。
行不会通过前端进行编辑,因此只读网格是可以接受的。
对于这种无缝分页,存在哪些用JavaScript编写的数据网格?
我需要呈现大量的行数据(即。数百万行)在一个网格中使用JavaScript传递给用户。
用户不应该一次只查看页面或有限数量的数据。
相反,应该显示所有数据都是可用的。
不同于一次性下载所有数据,小块数据是在用户访问它们时下载的。通过滚动网格)。
行不会通过前端进行编辑,因此只读网格是可以接受的。
对于这种无缝分页,存在哪些用JavaScript编写的数据网格?
当前回答
我使用了jQuery网格插件,这是很好的。
演示
其他回答
免责声明:我大量使用YUI DataTable很长一段时间没有头痛。它强大而稳定。根据您的需要,您可以使用支持ScrollingDataTable
x-scrolling y-scrolling xy-scrolling 强大的事件机制
对于你所需要的,我认为你想要的是一个tableScrollEvent。它的API说
当固定滚动数据表具有滚动时触发。
由于每个数据表都使用一个数据源,您可以通过tableScrollEvent以及呈现循环大小来监视其数据,以便根据需要填充ScrollingDataTable。
渲染循环大小表示
如果您的DataTable需要显示一个非常大的数据集的全部,renderLoopSize配置可以帮助管理浏览器DOM呈现,这样UI线程就不会被锁定在非常大的表上。任何大于0的值都将导致DOM呈现在setTimeout()链中执行,该链在每个循环中呈现指定的行数。理想值应该在每个实现中确定,因为没有硬性的规则,只有一般的指导方针:
By default renderLoopSize is 0, so all rows are rendered in a single loop. A renderLoopSize > 0 adds overhead so use thoughtfully. If your set of data is large enough (number of rows X number of Columns X formatting complexity) that users experience latency in the visual rendering and/or it causes the script to hang, consider setting a renderLoopSize. A renderLoopSize under 50 probably isn't worth it. A renderLoopSize > 100 is probably better. A data set is probably not considered large enough unless it has hundreds and hundreds of rows. Having a renderLoopSize > 0 and < total rows does cause the table to be rendered in one loop (same as renderLoopSize = 0) but it also triggers functionality such as post-render row striping to be handled from a separate setTimeout thread.
例如
// Render 100 rows per loop
var dt = new YAHOO.widget.DataTable(<WHICH_DIV_WILL_STORE_YOUR_DATATABLE>, <HOW YOUR_TABLE_IS STRUCTURED>, <WHERE_DOES_THE_DATA_COME_FROM>, {
renderLoopSize:100
});
<WHERE_DOES_THE_DATA_COME_FROM>只是一个单一数据源。它可以是JSON、JSFunction、XML甚至单个HTML元素
在这里你可以看到一个简单的教程,由我提供。注意,没有其他DATA_TABLE插件同时支持单点和双击。YUI DataTable允许您。更重要的是,你甚至可以在JQuery中使用它而不会感到头疼
你可以看到一些例子
列表项
请随意询问关于YUI DataTable的任何其他问题。
问候,
我使用了jQuery网格插件,这是很好的。
演示
(免责声明:我是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目前相对于其他实现的性能优势的情况下实现无限行的数量。
吕迪格,你能详细解释一下你是怎么解决的吗?
我知道这是个老问题,但是…还有dhtmlxGrid可以处理数百万行。有一个演示有50,000行,但可以在网格中加载/处理的行数是无限的。
免责声明:我来自DHTMLX团队。
我能想到的最佳方法是在每次滚动或滚动结束前以json格式加载数据块。Json可以很容易地转换为对象,因此可以很容易地不引人注目地构造表行