0

我有一个 jqGrid,我在其中启用了本地过滤/排序功能。当我将数据类型设置为 JSON 后,单击调用 .trigger("reloadGrid") 的自定义刷新按钮时,我正在重新加载网格(从服务器)。重新加载成功,但是当列顶部的某个过滤器字段中有值时,它会丢失该值。

我试图在将值设置为 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 is undefined”。如果我在重新加载后(在 loadComplete 中)打印 postData,那么我可以查看过滤器数据。

4

1 回答 1

0

下面是使用排序/过滤信息强制网格重新加载的代码。此代码位于 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
    );
}
于 2015-06-22T19:40:01.763 回答