【问题标题】:How to refresh jqgrid and go back to the current page using loadonce: true如何使用 loadonce 刷新 jqgrid 并返回当前页面:true
【发布时间】:2017-02-22 15:32:16
【问题描述】:

我正在使用以下设置一次从服务器加载所有数据:

loadonce: true

现在我尝试在编辑后重新加载网格:

// options for the Edit Dialog
{
 closeAfterEdit: true,
 closeOnEscape: true,
 reloadAfterSubmit: true,
 editCaption: "Edit User",
 width: 1140,
 height: 370,
 afterSubmit: function () {
                       $('#jqGrid').jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
                       return [true,'']; // no error
                   },
 errorTextFormat: function (data) {
                       return 'Error: ' + data.responseText
                                  }
},

数据是从服务器刷新的,但是有一个问题:例如,如果我在第 2 页编辑一条记录,它会在底部的导航栏上显示第 2 页,但它总是从第 1 页调出数据。任何帮助,将不胜感激。谢谢。

更新 #1

我尝试了以下代码:

var $self = $(this), p = $self.jqGrid("getGridParam");
p.datatype = "json";
$self.trigger("reloadGrid", { page: p.page, current: true });

然后我编辑并单击提交,即使导航栏停留在第 2 页,它仍会加载第 1 页数据。然后我单击前进箭头转到第 3 页,然后单击后退箭头再次转到第 2 页,现在它显示了第 2 页的数据。

更新 #2

这是我正在做但仍然无法正常工作的其他相关代码:

...

cmTemplate: { editable: true, editrules: { edithidden: true } },
            pager: "#jqGridPager",
            rowNum: 10,
            rowList: [5, 10, 20, 50],
            sortname: 'lastName, firstName',
            sortorder: 'asc',
            loadonce: true,
            viewrecords: true,
            gridview: true,
            recreateForm: true,
            width: 1140,
            height: "auto",
            multiselect: false,
            altRows: false,
            shrinkToFit: true,
            scroll: false
            }
        });
...

        $('#jqGrid').navGrid('#jqGridPager',
               // the buttons to appear on the toolbar of the grid
               {
                   edit: true,
                   add: true,
                   del: true,
                   search: true,
                   view: true,
                   refresh: true,
                   position: "left",
                   cloneToTop: false,
                   beforeRefresh: function () {
                       //Note: This function is only called after user clicks the refresh button
                       $('#jqGrid').jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
                   }
               },
               // Options for the Edit Dialog
               {
                   closeAfterEdit: true,
                   closeOnEscape: true,
                   reloadAfterSubmit: false,
                   editCaption: "Edit User",
                   width: 1140,
                   height: 370,
                   afterSubmit: function () {
                       var $self = $(this), p = $self.jqGrid("getGridParam");
                       p.datatype = "json";
                       $self.trigger("reloadGrid", { page: p.page, current: true });
                       return [true, '']; // no error
                   },
                   errorTextFormat: function (data) {
                       return 'Error: ' + data.responseText
                   }
               },
...

最终结果

我终于解决了这个问题!我从不免费的Guriddo jqGrid 切换到free jqGrid by Oleg 并且错误消失了!我最初无法让导航按钮出现在免费的 jqgrid 上,但它们没有出现的原因是因为我有标签 iconSet: "fontAwesome" 并且我没有引用该字体。当我完全删除该标签时,一切都很完美。您可以使用该标签,但必须引用图标集 url。就我而言,我不需要不同的图标集。

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    您可以使用reloadGridpage 选项(请参阅the answer 以获得相应的演示)。您可以使用$(this).jqGrid("getGridParam", "page") 获取page 参数,该参数保存当前页面。

    afterSubmit: function () {
        var $self = $(this), p = $self.jqGrid("getGridParam");
        p.datatype = "json";
        $self.trigger("reloadGrid", { page: p.page, current: true });
        return [true]; // no error
    }
    

    我使用reloadGridcurrent: true 选项在重新加载网格后选择当前选定的行。

    【讨论】:

    • 谢谢奥列格!请根据您的建议检查“更新 #1”。
    • @RobertSmith:不客气!我认为您应该检查您使用的其他选项。例如,您应该使用reloadAfterSubmit: false,因为您希望您的afterSubmit 代码 自己重新加载网格。您当前的选项 reloadAfterSubmit: true 使 第二次 重新加载,这是奇怪行为的根源。
    • Oleg,我将它设置为 false 但没有用。我将所有相关代码放在上面。谢谢。
    • @RobertSmith:很难为您提供帮助,因为我无法调试代码。无论如何,1) 最好将带有reloadGrid 的代码放在setTimeout(function () {...}); 内。它允许jqGrid完成afterSubmit的标准处理,并在以后处理reloadGrid。 2)您应该在所有问题中包含有关您使用的 jqGrid 版本以及您使用的 jqGrid 分支的信息。 3)我想你对从服务器重新加载数据有一些影响。哪种格式有数据?我想处理服务器响应是你的问题。
    • 谢谢奥列格。我正在使用 jqGrid 5.1.1。不过,这绝对不是服务器端问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 2014-12-11
    • 2013-02-19
    • 2015-12-01
    • 2019-11-28
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多