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

问题描述 投票:1回答:1

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

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

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

有没有办法用一个o(n)删除所有选定的行?

(我读过的一篇文章是将它发送到服务器,只是从头开始重新加载所有东西,因为整体节省时间非常高。我正在寻找jqGrid内部的内置方法)

谢谢,

的。

jquery jqgrid free-jqgrid
1个回答
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个元素),那么Web浏览器必须重新计算页面上几乎所有现有元素的CSS样式(例如位置)。然后删除第二行几乎是如此复杂。因此,在循环中使用delRowDataaddRowData将是非常无效的。在重新加载网格时,jqGrid将整个网格体构建为一个HTML片段,并在一次操作中将其放置在页面的DOM上。因为网格的重新加载可能非常快。

© www.soinside.com 2019 - 2024. All rights reserved.