我在这里看到了许多参考实现,以实现删除jqGrid中超过1个选定行的功能。
但是,所有这些实现最终都会对行ID列表进行迭代,并在每个ID中调用delRowData。
当选择一个1000行时,这不能很好地扩展,因为似乎每行删除我们都在等待o(n),导致整个操作的o(n ^ 2)。
是否可以用一个o(n)删除所有选定的行?
(我读过的一篇文章是将其发送到服务器,并从头开始重新加载所有内容,因为总体上节省的时间非常多。我正在jqGrid自身内寻找内置方法) / p>
谢谢
塔尔。
答案 0 :(得分:1)
我先说几句。不建议在页面上显示更多行,因为可以一次显示。与每页使用1000行相比,每页10000行和25行的网格性能至关重要。
无论如何,本地网格中多行数据的常见更改不是使用delRowData
或addRowData
。 替换整个数据要有效得多。典型的代码将是
var grid = $("#grid"),
p = grid.jqGrid("getGridParam"); // get reference to all parameters
p.data = newdata; // replace data parameter
grid.trigger("reloadGrid");
因此,我建议您获取数据的副本(或者您已有数据在网格外部),删除带有ID的项目(需要删除),设置新值p.data
并触发reloadGrid
以显示修改后的数据的第一页。
顺便说一句,delRowData
的使用很慢,正如您所描述的。原因是web browser reflow。如果您的页面包含例如1000x10个元素,并且仅删除第一行(更改了10个元素),则网络浏览器必须重新计算实际上所有个元素的css样式(例如位置)这页纸。然后,删除第二行几乎非常复杂。因此,在循环中使用delRowData
或addRowData
是非常无效的。在重新加载网格时,jqGrid将整个网格主体构建为一个HTML片段,并通过 one 操作将其放置在页面的DOM上。因此,网格的重新加载可能很快。