首先jqgrid treegrid 加载本地数据的方法如下:
var $gridList = $('#list'); var grid = $gridList.jqGrid({ datatype : 'jsonstring', datastr : data, colModel : [], viewrecords : true, //gridview:true, treeGrid : true, treedatatype : "local", treeGridModel : "adjacency", ExpandColumn : 'name', height : $(window).height() - 240, autowidth : '100%', width : $gridList.parent().width() - 1, jsonReader : { repeatitems : false, root : function(obj) { return obj; }, page : function(obj) { return 1; }, total : function(obj) { return 1; }, records : function(obj) { return obj.length; } } });
其中,不同于treegrid加载远程返回对象的是,需要设置datatype : 'jsonstring',数据也要赋值在datastr属性上
datatype : 'jsonstring',
datastr : data,
treedatatype : "local",
加载之后的效果:
但是在第一次加载之后,还会有后续的查询操作,一般的从服务器返回json形式的数据的时候,代码如下:
$("#list").jqGrid('setGridParam', { postData : postData, page : 1 }).trigger('reloadGrid');
网上搜索的treegrid的重新加载的方法,如下:
$jqGrid.jqGrid('setGridParam',{ url:path+"/admin/demo/getLogsGridJson.do", postData:{'aaa':111,'bbb':222}, // page:1, treedatatype : 'json' }).trigger("reloadGrid");
上面这段代码,在以treegrid形式重新加载本地数据的情况下,并不起作用,(我没有调试重新加载远程数据的情况)
在stackoverflow上搜索到一篇文章,代码如下:
$("#list").setGridParam({ datatype: "jsonstring", datastr: init() }).trigger("reloadGrid", [{page: 1}]);
依然,上面这段代码,在以treegrid形式重新加载本地数据的情况下,并不起作用,(我没有调试重新加载远程数据的情况)
后来实在没有办法,在这个上面耽误的时间已经太多了,终极解决方式:
$("#container").empty();
$("#container").append('<table id="list"></table>');
清空,重加元素,然后再重新绑定
参考网址:
https://stackoverflow.com/questions/17260450/jqgrid-reload-datatype-local-for-each-request
https://blog.csdn.net/qq_29542611/article/details/74979762