2010-06-05 24 views
23

我试图使用的jqGrid与本地数据,我发现了几个问题:的jqGrid刷新本地数据(JSON对象)

我初始化的东西,像这样:

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)我无法刷新数据。我使用自己的搜索功能来到我的results。我无法弄清楚如何更新现有的数据。网格首次初始化。在随后的尝试中,它会初始化为一个空表。

3)我已经试过了诸如:

$grid.empty() - 不工作,因为$网格对象由jqGrid的装饰。我试图“摧毁”旧的网格,并将其重新渲染为解决方法。 `$ grid.trigger('reloadGrid') - 不起作用,不知道为什么。

注意:这是使用jQGrid 3.7。

回答

7

问题1:

如果我们定义用于与客户端的数据网格寻呼机,寻呼机中的 按钮被自动禁用。换句话说,当前版本的网格 不支持客户端分页和搜索。

local data

问题2:你有没有尝试过:

$("#list").GridUnload(); 

看到heregridUnload()trigger('reloadGrid')之间的差异。

+2

是的我试过GridUnload,没有骰子。电网卸载并永不回来。 – Koobz 2010-06-13 18:15:07

+0

您的“结果”是否可能通过ajax请求传出,并且当您“卸载”并重新加载jqGrid时,结果尚未加载?那么网格将是空的? (这是我能想象到的唯一可能是错误的) – bruno 2010-06-14 06:28:10

6

我还没有找到一个很好的证明的方式来更新的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"); 

P.S.看看如何从电网获取所有数据链路Retrieving contents of the grid

31

您可以使用简单:

jQuery("#list") 
    .jqGrid('setGridParam', 
     { 
      datatype: 'local', 
      data:mydata 
     }) 
    .trigger("reloadGrid"); 
5

继对我的作品时,在现有的网格刷新数据:

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没有。

22

我能够实现类似的东西。我的问题的诀窍是在更新数据网格参数之前清除数据。假设你的网格在别处初始化(数据类型为'local'),请尝试:

function refreshGrid($grid, results) { 
    $grid.jqGrid('clearGridData') 
     .jqGrid('setGridParam', { data: results }) 
     .trigger('reloadGrid', [{ page: 1}]); 
} 
+2

此外,如果需要防止页面更改(如果可能)用于新数据(因此用户将在重新加载后保留在同一页上)应该使用类似这样的东西 代码'var prevPage = $ grid.jqGrid(“getGridParam”,'page'); var rowNum = parseInt($ grid.jqGrid(“getGridParam”,'rowNum'),10); var lastPage = Math.ceil(newData.length/rowNum); $ grid.jqGrid( 'clearGridData') .jqGrid( 'setGridParam',{数据:newData}) .jqGrid( 'setGridParam',{尾页:末页}) .trigger( 'reloadGrid',[{页:prevPage}]);' – 2011-12-07 14:52:28

+0

+1清除数据,也有问题 – TecHunter 2013-09-17 08:07:44

+0

非常感谢('clearGridData')! – dellgg 2014-06-27 10:13:47