在jqgrid中应用过滤器时重新加载网格不起作用?

时间:2014-10-30 12:38:40

标签: jquery jqgrid jqgrid-php

从后端获得响应后,网格重新加载无法正常工作,但在点击网格中的任何排序按钮后,我可以看到网格上应用了过滤器。

这里我已静态声明过滤器代码。

网格代码在

之下
jQuery("#grid").jqGrid({ 
url:'getList.php?mode=result_list', 
datatype: "json",
height: 255, 
width: 600, 
colNames:['Index','Name', 'Code','Result'], 
colModel:[
{name:'item_id',index:'item_id', width:65, sorttype:'integer',searchoptions:{sopt:['eq','ne','le','lt','gt','ge']}},
{name:'item',index:'item', width:150, sorttype:'string',searchoptions:{sopt:['eq','bw','bn','cn','nc','ew','en']}},
{name:'item_cd',index:'item_cd', width:100} ,
{name:'result',index:'result', width:100,sorttype:'string',searchoptions:{sopt:['eq','ne']} ], 
rowNum:50, 
rowTotal: 200,
loadonce:true, 
mtype: "GET", 
rownumWidth: 40, 
gridview: true, 
pager: '#pager451', 
sortname:'item_id', 
viewrecords: true, 
sortorder: "asc", 
 loadComplete: function() {
 $("#foo").trigger( "click" );
 },
caption: "Loading data from server at once" });
jQuery("#grid").jqGrid('filterToolbar',{searchOperators : true});

Foo Click函数jquery位于

之下
$("#foo").on( "click", function() {
                    var grid=$("#grid");
                    var dddf={"groupOp":"AND","rules":[{"field":"item_id","op":"eq","data":"123"}]};

                    jqgselectFilter(dddf);


                });
                function jqgselectFilter(myfilter){
                    grid = jQuery("#grid");
                    //console.log(myfilter);
                    grid[0].p.search = myfilter['rules'].length>0;
                    jQuery.extend(grid[0].p.postData,{filters:JSON.stringify(myfilter)});
                    grid.trigger("reloadGrid",[{page:1}]);    
                }

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确,但我认为您可以通过将loadComplete修改为以下内容来解决问题:

loadComplete: function () {
    if ($(this).jqGrid("getGridParam", "datatype") !== "local") {
        // initial loading from the server
         setTimeout(function () {
             $("#foo").trigger("click");
         }, 50);
    }
}

您将datatype: "json"loadonce: true一起使用。因此,在从服务器加载后,datatype将更改为"local" ,在调用loadComplete之后将更改为。因此,可以测试datatype是否不等于"local"来检测第一次加载。我将在第一次加载时执行的操作放在setTimeout内,以允许jqGrid完成初始处理(例如更改datatype)。