如何使用loadonce刷新jqgrid并返回当前页面:true

如何使用loadonce刷新jqgrid并返回当前页面:true,jqgrid,Jqgrid,我使用以下设置,一次从服务器加载所有数据: loadonce: true 现在,我尝试在编辑后重新加载网格: // options for the Edit Dialog { closeAfterEdit: true, closeOnEscape: true, reloadAfterSubmit: true, editCaption: "Edit User", width: 1140, height: 370, afterSubmit: function () {

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

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 });
然后我编辑并单击submit,它仍然加载第1页的数据,即使导航栏停留在第2页。然后我单击前进箭头转到第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
                   }
               },
...
最终结果

我终于解决了这个问题!我从“不自由”切换到“不自由”,错误就消失了!我最初无法让导航按钮出现在免费的jqgrid上,但它们没有出现的原因是因为我有标签iconSet:fontsawesome,并且我没有引用该字体。当我完全移除标签时,一切都很完美。您可以使用该标记,但必须引用iconset url。在我的例子中,我不需要一个不同的图标集。

您可以使用reloadGrid的页面选项查看相应的演示。您可以使用$this.jqGridgetGridParam,page来获取保存当前页面的页面参数

后提交:函数{ var$self=$this,p=$self.jqGridgetGridParam; p、 datatype=json; $self.triggerreloadGrid,{page:p.page,current:true}; 返回[true];//无错误 } 我使用了reloadGrid的current:true选项在重新加载网格后选择当前选定的行。

您可以使用reloadGrid的page选项查看相应的演示。您可以使用$this.jqGridgetGridParam,page来获取保存当前页面的页面参数

后提交:函数{ var$self=$this,p=$self.jqGridgetGridParam; p、 datatype=json; $self.triggerreloadGrid,{page:p.page,current:true}; 返回[true];//无错误 }
在重新加载网格后,我使用了reloadGrid的current:true选项来选择当前选定的行。

谢谢您!请根据您的建议检查更新1。@RobertSmith:不客气!我认为你应该研究一下你使用的其他选项。例如,您应该使用reloadeaftersubmit:false,因为您更希望来自afterSubmit的代码自己重新加载网格。您当前的选项reloadeaftersubmit:true进行第二次重新加载,这是奇怪行为的起源。Oleg,我将其设置为false,但不起作用。我把所有相关代码放在上面。谢谢。@RobertSmith:很难帮助你,因为我无法调试代码。无论如何,1最好将重新加载网格的代码放在setTimeoutfunction{…};内;。它允许jqGrid完成后提交的标准处理,并在以后处理重新加载的Grid。2您应该在所有问题中包含关于您使用的jqGrid版本和jqGrid分支的信息。3我认为从服务器重新加载数据会产生一些影响。数据的格式是什么?我想处理服务器响应是您的问题。谢谢Oleg。我使用的是jqGrid 5.1.1。这绝对不是服务器端的问题。谢谢你,奥利格!请根据您的建议检查更新1。@RobertSmith:不客气!我认为你应该研究一下你使用的其他选项。例如,您应该使用reloadeaftersubmit:false,因为您更希望来自afterSubmit的代码自己重新加载网格。您当前的选项reloadeaftersubmit:true进行第二次重新加载,这是奇怪行为的起源。Oleg,我将其设置为false,但不起作用。我把所有相关代码放在上面。谢谢。@RobertSmith:很难帮助你,因为我无法调试代码。无论如何,1最好将重新加载网格的代码放在setTimeoutfunction{…};内;。它允许jqGrid完成后提交的标准处理,并在以后处理重新加载的Grid。2您应该在所有问题中包含关于您使用的jqGrid版本和jqGrid分支的信息。3我认为从服务器重新加载数据会产生一些影响。数据的格式是什么?我想处理服务器响应是您的问题。谢谢Oleg。我使用的是jqGrid 5.1.1。但这绝对不是服务器端的问题。