jqGrid的刷新过滤值.trigger后(“reloadGrid”)(jqGrid Reload

2019-11-03 20:46发布

我有一个jqGrid的,我已启用了本地过滤器/排序功能。 我重装了网格(从服务器)时点击自定义刷新按钮,它调用.trigger(“reloadGrid”)后,我设置的数据类型为JSON。 重载是成功的,然而,当有在它正在失去价值柱顶部的过滤器字段的值。

我试图将该值设置为JSON之前保存postData.filters,然后重装后,我想新的过滤器设置为保存的值,数据设置为本地,然后重新并网发电。

这是我到目前为止有:

var previouslySavedFilter;
var p;    

$.subscribe('loadComplete', function(event, data) {
    //Set Grid Attributes
    $("#gridtable").jqGrid('setGridParam', {
        ignoreCase : true
    });

    //Bind events to refresh grid
    $("#gridtable").bind("jqGridAddEditAfterSubmit", function () {
        $(this).jqGrid("setGridParam", {datatype: 'json'});
            return [true];
    });

    $("#refresh_gridtable").bind("click", function(){
        $("#gridtable").jqGrid("setGridParam", {datatype: 'json'});
        return [true];
    });

    //Set Up to Apply Local Filters
    var p = $('#gridtable').jqGrid("getGridParam", "postData");
    var dtype = $('#gridtable').jqGrid("getGridParam", "datatype");

    if (dtype === "json") {
        setTimeout(function () {
            console.log("Value of p on loadComplete: " + JSON.stringify(p.filters));
            console.log("Value of previouslySavedData on loadComplete: " + JSON.stringify(previouslySavedFilter));

            p.filters = previouslySavedFilter; 
            p.search = true;
            $("gridtable").trigger("reloadGrid");
            alert("Hey");
        }, 
        50);
    };
}

function refreshGrid(){
    var p = $('#gridtable').jqGrid("getGridParam", "postData");
    console.log("Value of P in reFreshGrid: " + JSON.stringify(p)); 
    previouslySavedFilter = p.postData.filters;

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


<sjg:grid
    id="gridtable"
    navigatorExtraButtons="{
    refresh:{ 
        title:'Refresh', 
        icon:'ui-icon-refresh',
        onclick:refreshGrid
    }
    ...
>

我不知道如何保存过滤器之前我设定的数据类型为JSON并重新加载网格。 上面的代码显示“p是未定义”在控制台中。 如果我打印POSTDATA重载(在loadComplete)AFTER然后我可以查看滤波器数据。

Answer 1:

下面是这将迫使电网使用的排序/过滤器信息重新加载代码。 这一代码进入在loadComplete结束()。 设置数据类型为本地,然后触发重载的关键是获得格来排序/过滤器应用到网格(当数据被设置为“JSON”,这将重新加载从服务器电网重装。)

var dtype = $('#gridtable').jqGrid("getGridParam", "datatype");

if (dtype == 'json'){
    $("#gridtable").jqGrid("setGridParam", {datatype: 'local'});    
    setTimeout(function () {
        p.search = true;
        $("#gridtable").trigger("reloadGrid");
        },0
    );
}


文章来源: jqGrid Reload Filter Values After .trigger(“reloadGrid”)