我在jqGrid分页方面遇到了一些问题。我想创建自己的组并向其添加行数据。虽然我在第一页上将数据添加到网格中,但是如果在下一页上添加新组,我可以在Firebug和空页中看到异常。我使用addJSONData方法。问题是addJSONData迭代Grid中的所有组并查找它们的长度:
str += "<tr id=\""+hid+"\" role=\"row\" class= \"ui-widget-content jqgroup ui-row-"+$t.p.direction+"\"><td colspan=\""+colspans+"\">"+icon+$.jgrid.format(grp.groupText[0], gv, grdata[n].length)+"</td></tr>";
但是如果我在前一页上有一个组并且只用ajax发送第二组的数据并调用addJSONData,则抛出异常:未定义的长度。我该如何解决?
更新:这是我的代码:
function addToGrid(group, ids){
var rowNum = jQuery(myGrid).jqGrid('getGridParam', 'rowNum');
data = jQuery.ajax({
url: myUrl,
data: {'group': group, 'rowNum': rowNum, 'ids': ids},
dataType: 'json',
complete: function(jsondata,stat){
if(stat=="success") {
var targetGrid = jQuery(myGrid);
var myjsongrid = eval('('+jsondata.responseText+')');
var rows = myjsongrid.rows;
if(rows.length != 0){
targetGrid[0].addJSONData(myjsongrid);
}
}
}
});
}
表:
$(myGrid).jqGrid({
url: myUrlTable,
datatype: 'json',
postData: {},
mtype: 'GET',
jsonReader: { repeatitems : false},
colNames: ['Id', 'Group', 'Bytes'],
colModel: [{name:'id', index: 'id', hidden: true},
{name:'group', index: 'group', width: 100},
{name:'bytes', index: 'bytes', width: 60, classes:'gc column-bytes', sortable: false, sorttype:'int', formatter:'integer'}
],
grouping: true,
groupingView: {
groupField : ['group'],
groupText : ['Group: ({1} items)'],
groupOrder: 'asc',
groupDataSorted : true
},
sortable: true,
toppager: true,
hoverrows: true,
altrows: false,
});
从服务器测试数据:
{"total":1,"page":1,"records":1,"rows":[{"group":"abc", "bytes":229447,"id":"7124"}]}
另一个记录是相似的。我添加了20条记录,然后我在另一个页面上添加了bbb组。 方法addToGrid从另一个网格调用,并带有id并输入组名称到输入对话框。然后我将它传递给服务器,服务器将有效数据返回到fulefill网格。服务器仅返回我的案例中最后一页的数据5行。
服务器响应:
{"total":2,"page":2,"records":5,"rows":[{"group":"bbb", "bytes":229447,"id":"7155"},
{"group":"bbb", "bytes":229447,"id":"7156"},
{"group":"bbb", "bytes":229447,"id":"7157"},
{"group":"bbb", "bytes":229447,"id":"7158"},
{"group":"bbb", "bytes":229447,"id":"7159"}
]
}
答案 0 :(得分:0)
我也遇到了同样的问题。以下行将修复代码。
$("#jqGrid").jqGrid("groupingSetup");
在 addJSONData 功能之前添加此代码。
function addToGrid(group, ids){
var rowNum = jQuery(myGrid).jqGrid('getGridParam', 'rowNum');
data = jQuery.ajax({
url: myUrl,
data: {'group': group, 'rowNum': rowNum, 'ids': ids},
dataType: 'json',
complete: function(jsondata,stat){
if(stat=="success") {
$("#myGrid").jqGrid("groupingSetup");
var targetGrid = jQuery(myGrid);
var myjsongrid = eval('('+jsondata.responseText+')');
var rows = myjsongrid.rows;
if(rows.length != 0){
targetGrid[0].addJSONData(myjsongrid);
}
}
}
});
答案 1 :(得分:0)
在本例中提到的@unknown用户应该在调用addJsonData之前调用groupingSetup方法,但是如果你动态更改了分组和其他参数,这还不够。
在调用groupingSetup之前,您需要使用setGridParam方法设置更改的分组参数。
您可以在我们的新Guriddo jqGrid documentation
中找到更多内容亲切的问候