是否可以重新加载网格数据(远程)并保留过滤器?

时间:2018-01-03 19:47:52

标签: jquery jqgrid free-jqgrid

我有一个按钮负责向数据库添加新数据,然后我需要用新数据重新加载网格,但我想保留我之前应用的过滤器。这就是函数的样子:

$('#create-link').on('submit', function (e) {
    e.preventDefault();

    $.ajax({
        url: '/ajax/plans_to_forms/save',
        data: $(this).serialize(),
        type: 'POST',
        dataType: 'json'
    }).done(function () {
        $grid.jqGrid('setGridParam', {datatype: 'json'}).trigger('reloadGrid');
    });
});

这一行:$grid.jqGrid('setGridParam', {datatype: 'json'}).trigger('reloadGrid');正在制作重新加载远程数据的技巧,但我正在失去过滤器。

有没有办法在重新加载网格数据后保留它们,所以我回到以前的数据而不是全部数据?

在添加新项目之前,已应用过滤器并且一切正常: enter image description here

添加新项目后,过滤器尚未应用,我获得了所有数据,因此我必须清除过滤器并重新设置: enter image description here

  

注意:新项目属于同一计划,因此它应该出现在那里

1 个答案:

答案 0 :(得分:2)

这是可能的,但问题包括许多小问题。首先应该了解重新加载和过滤是如何工作的,哪个jqGrid参数对此很重要,然后必须在程序中实现相应的小步骤。

第一个问题是在使用loadonce: true选项的情况下从服务器重新加载数据。您目前使用代码

$grid.jqGrid('setGridParam', {datatype: 'json'}).trigger('reloadGrid');

但是免费的jqGrid允许执行

$grid.trigger('reloadGrid', {fromServer: true});

可替换地。免费jqGrid在内部datatype选项中保存原始dataTypeOrg值(" json"," jsonp"," xml"依此类推)如果使用选项datatype,它会从dataTypeOrg恢复fromServer: true。了解本地过滤只不过是重新加载具有datatype: 'local'的网格,这一点非常重要。因此,如果想要使用强大的本地排序和过滤,那么不应在所有重新加载上使用 fromServer: true(永久不应使用reloadGridOptions: { fromServer: true })从服务器加载的数据。

第二个问题是过滤从服务器返回的数据数据将在jqGrid中显示。在旧的jqGrid中它是不可能的,但是免费的jqGrid有选项forceClientSorting: true,它可以做得很好。该选项的名称并不好,但我不想因为它的使用而改变它。选项强制本地排序和过滤数据 之前从服务器加载的数据的第一页将显示在网格中。

下一个问题是使用过滤器中的数据填充过滤器工具栏,包括显示过滤器操作(如果使用searchOperators: true选项filterToolbar)。默认情况下激活的选项loadFilterDefaults: true可以执行此操作。它是一个额外的免费jqGrid选项,在旧的jqGrid中不存在。结果像

这样的设置
postData: {
    filters: JSON.stringify({
            groupOp: "AND",
            groups: [],
            rules: [
                {field: "ship_via", op: "ne", data: "FedEx"},
                {field: "closed", op: "eq", data: true},
                {field: "name", op: "bw", data: "test"}
            ]
    })
},
search: true,
forceClientSorting: true
https://jsfiddle.net/OlegKi/hvwn1tf7/3/中使用的

做了所有需要的事情。

接下来要考虑的事情主要是保存/恢复postData.filters并设置search: true如果想要应用过滤器,但是它可以理解一切是如何工作的,那么就可以了很容易实现所需的行为。