使用addJSONData对问题进行分组

时间:2011-08-04 13:34:22

标签: jqgrid

我在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"}
                                        ]
 }

2 个答案:

答案 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

中找到更多内容

亲切的问候