没有卸载网格,JqGrid重新加载无法正常工作

时间:2015-09-18 06:13:35

标签: javascript jquery jqgrid

我正在使用jqgrid版本4.5.2。我在网格外部有一个角色列表组合框,并且需要更改我需要重新加载网格的选项。下面是我的网格的定义。

var finalUrl='';

 var queueStatus=jQuery('#queueStatus option:selected').val();

finalUrl =“http://localhost:8080/ui/paw/loadworkflowqueuedata.raws?selRole=”+ selectedRole +“&”+ queueStatus;

 var queueStatus=jQuery('#queueStatus option:selected').val();
 finalUrl= "http://localhost:8080/ui/paw/loadworkflowqueuedata.raws?timezone="+&selRole="+ selectedRole+"&"+queueStatus;
 jq("#grid").jqGrid('GridUnload');

 jq("#grid").jqGrid({       
 url:finalUrl,   
 ajaxGridOptions: {cache: false},//added the option to always reload the grid and not to cache the result.
 datatype: 'json',    
 mtype: 'GET', 
 colNames:[ 'Requestor Name'],       
 colModel:[
  {name:'requestor',index:'requestor',sortable: true, width:100,editable:false, editrules:{required:true}, editoptions:{size:10}}
  ],
   postData: {     
   },    
   height: 'auto',       
   autowidth: true,    
   rownumbers: true,       
   pager: '#pager',       
   viewrecords: true,       
   sortorder: "asc",       
   emptyrecords: "Empty records",      
   loadonce: true,
   rowNum:20,
   ignoreCase: true,
   prmNames: {
       nd: null
   },   
   loadComplete: function() {
    },

   jsonReader : {    
       root: "rows",           
       repeatitems: false,
       page:"page",           
       total: "total",           
       records: "records", 
       cell: "cell",           
       id: "id"      
       }   
   });

 jQuery("#grid").jqGrid('navGrid','#pager',{edit:false,add:false,del:false,search: false, refresh:true})
   .navButtonAdd('#pager',{caption:"Export All",buttonicon:"ui-icon-document",onClickButton: function(){window.open(excelUrl,'_self');},position:"last"});
 jQuery("#grid").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: "cn",ignoreCase: true });

只有保留以下声明时,上面的网格才能正常工作(在更改rolelist组合框时正常刷新)。

 jq("#grid").jqGrid('GridUnload');

如果我删除上述语句并重新加载页面,而不是第一次正确加载网格,但之后如果我更改了我的角色列表组合框中的选项,它就无法刷新网格数据,也不会抛出任何错误

我可以知道为什么我需要卸载网格以进行刷新吗?有没有办法可以通过卸载网格来刷新网格?我是否遗漏了网格定义中的任何选项,这就是为什么网格重新加载不起作用?如果需要有关解决方案的上述问题的更多详细信息,请告诉我。

1 个答案:

答案 0 :(得分:3)

您使用loadonce: true选项非常有用,可以立即将所有服务器数据加载到客户端,然后使用客户端上的数据(分页,过滤等)与服务器通信。为此,jqGrid在第一次加载数据后将网格的datatype参数更改为"local"。因此,您需要在触发datatype事件之前将"json"参数的值重置回reloadGrid

相应的代码就像

// create the initial grid
jQuery("#grid").jqGrid({
    ...
    url: finalUrl,   
    datatype: 'json',
    loadonce: true,
    ...
 });

 jQuery('#queueStatus').change(function () {
     jQuery("#grid").jqGrid("setGridParam", {
         datatype: "json",
         url: "basePartOfUrl?" + jQuery.param({
             timezone: "blabla",
             selRole: jQuery('#queueStatus').val();
         })
     }).trigger("reloadGrid");
 });

我使用上面的jQuery.param而不是直接构造字符串中的参数来使代码更正确。或者,应使用encodeURIComponent构造附加到URL的参数值。很明显,如果没有空格,没有特殊字符等,可以直接使用queueStatus,但仍然建议使用encodeURIComponentjQuery.param并使代码的工作独立于字符串参数的值。