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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用本地网格删除Free-jqGrid中的多行(4.15)相关的知识,希望对你有一定的参考价值。

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

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

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

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

(我读过的一篇文章是将它发送到服务器,只是从头开始重新加载所有东西,因为整体节省时间非常高。我正在寻找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的项目,需要删除,设置p.data的新值并触发reloadGrid以显示第一页修改过的数据

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

以上是关于使用本地网格删除Free-jqGrid中的多行(4.15)的主要内容,如果未能解决你的问题,请参考以下文章

free-jqgrid中的日期“少但不空”自定义搜索

具有 1000 多行的网格视图的切换/取消切换行的性能问题

从可编辑网格中的存储中删除记录

extjs 4.1.1 - 本地数据网格中的分页

extjs网格面板单元格中的多行文本

具有多行的数据网格单元格中的中心文本