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

Delete multiple rows in Free-jqGrid with local grid (4.15)

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

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

当一个人选择说1000行时,这不是很好地缩放,因为似乎我们正在等待每个行删除,从而在O(n^2)上进行整个操作。

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

(我读到的一个 post 是将其发送到服务器并简单地从头开始重新加载所有内容,因为总体上节省的时间非常高。我正在寻找一种内置方法在 jqGrid 本身内)

谢谢,

总计

我从普通话开始。不建议在页面上显示更多行,因为它可以一次显示。与使用每页 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 的项目,设置 [=13= 的新值]并触发reloadGrid显示修改数据的第一页。

顺便说一下,delRowData 的使用速度如您所述慢得多。原因是web browser reflow。如果您的页面包含例如 1000x10 个元素并且您只删除了第一行(您更改了 10 个元素),那么网络浏览器必须重新计算几乎 所有 css 样式(例如位置) 页面上的现有元素。然后删除第二行几乎就是这么复杂。因此,在循环中使用 delRowDataaddRowData 将非常无效。在重新加载网格时,jqGrid 构建 整个 网格体作为一个 HTML 片段,并将其放置在 one[=32] 页面的 DOM 上=] 操作。因为网格的重新加载可以非常快。