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

时间:2017-02-22 15:32:17

标签: jqgrid

我正在使用以下设置,它会立即从服务器加载所有数据:

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 });

然后我编辑并点击提交,它仍然会加载第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
                   }
               },
...

最终结果

我终于解决了问题!我从非免费Guriddo jqGrid切换到free jqGrid by Oleg,错误消失了!我最初无法让导航按钮显示在免费的jqgrid上,但他们没有出现的原因是因为我有标签iconSet:“fontAwesome”而我没有引用该字体。当我完全删除该标签时,一切都很完美。您可以使用该标记,但必须引用iconset网址。在我的情况下,我不需要一个不同的图标集。

1 个答案:

答案 0 :(得分:2)

您可以使用page的{​​{1}}选项(有关相应的演示,请参阅the answer)。您可以使用reloadGrid获取$(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 } current: true选项在重新加载网格后选择当前选定的行。