我正在尝试将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)我无法刷新数据。我正在使用自己的搜索功能来到我的results
。我无法弄清楚如何更新现有数据。网格第一次初始化。在后续尝试中,它会初始化为空表。
3)我尝试过这样的事情:
$grid.empty()
- 不起作用,因为$ grid对象由jqgrid修饰。我试图“核”旧网格,然后简单地重新渲染它作为一种解决方法。
`$ grid.trigger('reloadGrid') - 不起作用,不知道为什么。
注意:这是使用jQGrid 3.7。
答案 0 :(得分:31)
你可以使用简单的:
jQuery("#list")
.jqGrid('setGridParam',
{
datatype: 'local',
data:mydata
})
.trigger("reloadGrid");
答案 1 :(得分:23)
我能够实现类似的目标。我的问题的技巧是在更新数据网格参数之前清除数据。假设您的网格在其他位置初始化(使用数据类型:'local'),请尝试:
function refreshGrid($grid, results) {
$grid.jqGrid('clearGridData')
.jqGrid('setGridParam', { data: results })
.trigger('reloadGrid', [{ page: 1}]);
}
答案 2 :(得分:7)
如果我们为客户端数据的网格定义了一个寻呼机,那么寻呼机中的按钮 自动禁用。换句话说,当前版本的网格确实如此 不支持客户端分页和搜索。
问题2:你有没有尝试过:
$("#list").GridUnload();
请参阅here了解gridUnload()
和trigger('reloadGrid')
之间的差异。
答案 3 :(得分: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
中获取所有数据的链接答案 4 :(得分: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()随后什么都不做。
答案 5 :(得分:0)
如果您使用的是本地数据,则应在json
的本地数据中提及您的本地jqGrid
setGridParam
属性
jQuery("#list")
.jqGrid('setGridParam', {
datatype: 'local',
data:results //json object
});
要重新加载 jqgrid
,您可以使用以下内容。
jQuery("#list").trigger("reloadGrid");