使用本地网格(4.15)删除Free-jqGrid中的多行

时间:2019-04-28 15:02:06

标签: jquery jqgrid free-jqgrid

我在这里看到了许多参考实现,以实现删除jqGrid中超过1个选定行的功能。

但是,所有这些实现最终都会对行ID列表进行迭代,并在每个ID中调用delRowData。

当选择一个1000行时,这不能很好地扩展,因为似乎每行删除我们都在等待o(n),导致整个操作的o(n ^ 2)。

是否可以用一个o(n)删除所有选定的行?

(我读过的一篇文章是将其发送到服务器,并从头开始重新加载所有内容,因为总体上节省的时间非常多。我正在jqGrid自身内寻找内置方法) / p>

谢谢

塔尔。

1 个答案:

答案 0 :(得分:1)

我先说几句。不建议在页面上显示更多行,因为可以一次显示。与每页使用1000行相比,每页10000行和25行的网格性能至关重要。

无论如何,本地网格中多行数据的常见更改不是使用delRowDataaddRowData替换整个数据要有效得多。典型的代码将是

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样式(例如位置)这页纸。然后,删除第二行几乎非常复杂。因此,在循环中使用delRowDataaddRowData是非常无效的。在重新加载网格时,jqGrid将整个网格主体构建为一个HTML片段,并通过 one 操作将其放置在页面的DOM上。因此,网格的重新加载可能很快。