【问题标题】:Delete multiple rows in Free-jqGrid with local grid (4.15)使用本地网格删除 Free-jqGrid 中的多行 (4.15)
【发布时间】:2019-04-28 15:02:05
【问题描述】:

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

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

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

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

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

谢谢,

塔尔。

【问题讨论】:

  • 您使用哪种数据类型?你使用简单的网格、TreeGrid 还是其他类型的网格?您使用本地或远程分页吗?您通常使用哪种页面尺寸?
  • 感谢 Oleg,这是一个简单的网格,所有操作都在本地进行(没有什么是远程的)。此特定场景中的数据大小为 10000 行。用户将页面大小设置为 1000,“全选”并删除(因此他想删除所有 1000 个条目),没有应用任何过滤器或排序。使用 delRowData 删除所有 1000 行需要 20 秒(在迭代中)。

标签: jquery jqgrid free-jqgrid


【解决方案1】:

我从普通话开始。不建议在页面上显示更多行,因为可能一次显示。例如,每页 10000 行和 25 行的网格的性能比每页 1000 行的使用要好得多。

无论如何,本地网格中多行数据的常见更改不是使用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 并触发 @ 987654326@显示修改数据的第一页。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多