Проблема с группировкой с addJSONData - PullRequest
1 голос
/ 04 августа 2011

У меня проблема с подкачкой 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 записей, а затем добавил следующие 5 на другой странице с группой BBB.Метод addToGrid вызывается из другой сетки с идентификаторами и введенным именем группы в диалог ввода.Затем я передаю его на сервер, и сервер возвращает действительные данные в сетку фулфилла.Сервер возвращает только данные для последней страницы в моем случае 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 голосов
/ 07 июля 2017

Как пользователь @unknown, упомянутый в этом случае, вы должны вызвать метод groupingSetup, прежде чем вызывать addJsonData, но этого недостаточно для динамического изменения группировки и других параметров.

Вам необходимо установитьперед вызовом groupingSetup изменил сгруппированные параметры с помощью метода setGridParam.

Больше вы можете найти в нашей новой документации Guriddo jqGrid

С уважением

0 голосов
/ 07 июля 2017

У меня тоже возникла такая же проблема. Следующая строка исправит код.

$("#jqGrid").jqGrid("groupingSetup");

добавить этот код перед addJSONData function.

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);
          }           
       }
    }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...