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()后来什么也没做。

如果您使用的是本地数据,则应在jqGridsetGridParam 属性中提及您的本地json数据

  jQuery("#list") .jqGrid('setGridParam', { datatype: 'local', data:results //json object }); 

重新加载 jqgrid您可以使用以下内容。

  jQuery("#list").trigger("reloadGrid");