【问题标题】:Saving selected rows in a jqGrid while paging分页时将选定的行保存在 jqGrid 中
【发布时间】:2010-04-21 13:05:46
【问题描述】:

我有一个 jqGrid,用户可以使用它来选择记录。可以跨多个页面选择大量记录。

当用户翻阅数据时,选定的行似乎被清除了。是否由开发人员手动跟踪数组中的选定行?我很好,但我不确定最好的方法是什么。我不确定我是否想在选择任意数量的记录时拼接一个数组,因为这似乎真的会减慢速度。

我的最终目标是有一个 jQueryUI 对话框,当它关闭时,同时存储所有选定的行,以便我可以将其发布到服务器。

注意:添加 aspnetmvc 标记只是因为这是针对 MVC 应用程序。

【问题讨论】:

    标签: jquery asp.net-mvc jquery-ui jqgrid


    【解决方案1】:

    是的,由开发人员手动跟踪此选择。不过,您不必使用数组;你可以使用任何你喜欢的数据结构。

    【讨论】:

    • 我在想当用户取消选择时,数组可能更容易删除数据。我计划使用onSelectRow。不过,我承认我不是资深的 JS 开发人员 :)
    【解决方案2】:

    在选中$.data()容器时,我会加载每一行。通过这种方式,您可以将它们存储在远离网格的地方,当用户完成选择后,您可以使用一个很好的打包数据集。

    【讨论】:

    • 这似乎处理 DOM 元素。真的,我需要的只是一个 ID 列表。然后我会解析 ID 并将它们作为隐藏字段注入到 DOM/Form 中。不过,值得研究 - 谢谢!
    【解决方案3】:

    我有类似的要求并遇到了这篇文章。我想我会分享我的解决方案:

    var selId;
    $("#grid").jqGrid({
        ...
        onSelectRow: function(id){ 
            selId = id;
        },
        gridComplete: function() {
            $("#grid").setSelection(selId, true); 
        },
        ...
    });
    

    这仅用于一个选择,但可以通过将selId 设为一个数组来轻松适应多个选择。

    【讨论】:

    • 简单的解决方案,只是小心使用 selId 作为数组。如果您将选定的 id 添加到 onSelectRow 的列表中,并使用 for 循环 for(var i = 0; i < selId.length; i++){ jQuery("#dGrid").setSelection(selId[i], true);} 遍历 gridComplete 部分中的数组,您将有一个无限循环。您正在 gridComplete 中选择行,该行调用 onSelectRow 并增加数组的大小。在添加之前,您需要检查该 id 是否已存在于数组中,从而停止不断重新推送相同的 id。
    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多