我正在使用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');
如果我删除上述语句并重新加载页面,而不是第一次正确加载网格,但之后如果我更改了我的角色列表组合框中的选项,它就无法刷新网格数据,也不会抛出任何错误
我可以知道为什么我需要卸载网格以进行刷新吗?有没有办法可以通过卸载网格来刷新网格?我是否遗漏了网格定义中的任何选项,这就是为什么网格重新加载不起作用?如果需要有关解决方案的上述问题的更多详细信息,请告诉我。
答案 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
,但仍然建议使用encodeURIComponent
或jQuery.param
并使代码的工作独立于字符串参数的值。