jqGrid刷新本地数据(JSON对象)
我正在尝试将jqGrid与本地数据一起使用,我发现了一些问题:
我正在初始化这样的事情:
function refreshGrid($grid, results) { $grid.jqGrid({ data: results, datatype: "local", colNames:['#','File', 'Category', 'Line Number', 'Message Text','Detailed'], colModel:[ {name:'count',index:'count', width:100, resizable: true}, {name:'basename',index:'basename', width:100, resizable: true, classes:['basename']}, {name:'category',index:'category', width:60, resizable: true}, {name:'linenumber',index:'linenumber', width:60, resizable: true}, {name:'text',index:'text',width:400, resizable: true}, {name:'detailed',index:'detailed',width:100,classes:['detailed'], resizable: true } ], viewrecords: true, rowNum:100, rowList:[100,200], pager: '#debug_errors_pager', caption:"JSON Example" }); }
我传入的数据, results
是一个对象数组。
问题:
1)寻呼机完全关闭。 它显示正确的计数,但它实际上并不让我翻阅数据。
2)我无法刷新数据。 我正在使用自己的搜索function来获得我的results
。 我无法弄清楚如何更新现有数据。 网格第一次初始化。 在后续尝试中,它初始化为空表。
3)我尝试过这样的事情:
$grid.empty()
– 不起作用,因为$ grid对象由jqgrid修饰。 我试图“核”旧网格,然后简单地重新渲染它作为一种解决方法。 `$ grid.trigger(’reloadGrid’) – 不起作用,不知道为什么。
注意:这是使用jQGrid 3.7。
你可以使用简单的:
jQuery("#list") .jqGrid('setGridParam', { datatype: 'local', data:mydata }) .trigger("reloadGrid");
我能够实现类似的东西。 我的问题的诀窍是在更新数据网格参数之前清除数据。 假设您的网格在其他位置初始化(使用数据类型:’local’),请尝试:
function refreshGrid($grid, results) { $grid.jqGrid('clearGridData') .jqGrid('setGridParam', { data: results }) .trigger('reloadGrid', [{ page: 1}]); }
问题1:
如果我们为具有客户端数据的网格定义了一个寻呼机,则会自动禁用寻呼机中的按钮。 换句话说,当前版本的网格不支持客户端分页和搜索。
本地数据
问题2:你试过了吗:
$("#list").GridUnload();
请参阅此处了解gridUnload()
和trigger('reloadGrid')
之间的区别。
我没有找到一个很好的文档化方法来更新jqGrid的本地数据,这里是我如何扩展jqGrid来解决我的问题:
$.extend($.fn.jqGrid, { setData: function(data) { this[0].p.data = data; return true; } } );
在此之后,您可以执行以下操作以使用新数据更新jqGrid:
假设您的网格声明如下:
jQuery("#list").jqGrid({ datatype: "local", ... other params ... });
然后你可以这样做:
jQuery("#list").jqGrid('setData', array_with_new_data); jQuery("#list").trigger("reloadGrid");
PS查看如何从网格中获取所有数据的链接检索网格的内容
在刷新现有网格上的数据时,以下内容适用于我:
var gridData = [...]; var grid = jQuery('#gridId'); grid.jqGrid('clearGridData'); if( grid.get(0).p.treeGrid ) { grid.get(0).addJSONData({ total: 1, page: 1, records: gridData.length, rows: gridData }); } else { grid.jqGrid('setGridParam', { datatype: 'local', data: gridData, rowNum: gridData.length }); } grid.trigger('reloadGrid');
我必须这样做,因为reloadGrid()调用populate(),populate()调用addLocalData()并将返回值传递给addJSONData(),但是对于treeGrid == true,addLocalData()不返回任何内容,并且addJSONData()后来什么也没做。
如果您使用的是本地数据,则应在jqGrid
的setGridParam
属性中提及您的本地json
数据
jQuery("#list") .jqGrid('setGridParam', { datatype: 'local', data:results //json object });
要重新加载 jqgrid
您可以使用以下内容。
jQuery("#list").trigger("reloadGrid");