ошибка b.jgrid.formatter для clearGridData и reloadGrid

#javascript #jquery #ajax #datagrid #jqgrid

#javascript #jquery #ajax #datagrid #jqgrid

Вопрос:

Я делаю ajax-вызов своему контроллеру, после этого данные будут отображаться в сетке с пейджером. это мое объявление сетки.

 function BuildApportGrid() {
jQuery("#grid_apport").jqGrid('GridUnload');
jQuery("#grid_apport").jqGrid({
    editurl: "clientArray",
    datatype: "json",
    data: [],
    colNames: ['Code Barrage', 'Organisation', 'Nom', 'Date', 'Cote à 8h', 'Volume total', 'Debit', 'Apport', 'Volume restitue'],
    colModel: [{
        name: 'code',
        index: 'code',
        hidden: true,
        search: false,
        editable: true
    }, {
        name: 'organisation',
        index: 'organisation',
        hidden: true,
        search: false,
        editable: true
    }, {
        name: 'nom',
        index: 'nom',
        hidden: false,
        search: false,
        editable: true
    }, {
        name: 'date',
        width: 100,
        index: 'date',
        hidden: false,
        search: false,
        editable: true
    }, {
        name: 'cote_a_8h',
        width: 100,
        index: 'cote_a_8h',
        hidden: false,
        search: false,
        editable: true
    }, {
        name: 'volume_total',
        width: 100,
        index: 'volume_total',
        hidden: false,
        search: false,
        editable: true
    }, {
        name: 'debit',
        width: 100,
        index: 'debit',
        hidden: false,
        search: false,
        editable: true
    }, {
        name: 'apport',
        width: 100,
        index: 'apport',
        hidden: false,
        search: false,
        editable: true
    }, {
        name: 'volume_restitue',
        width: 100,
        index: 'volume_restitue',
        hidden: false,
        search: false,
        editable: true
    }
    ],
    onSelectRow: function (rowid) {},
    ondblClickRow: function (rowid) {},
    onCellSelect: function (rowid, iCol, cellcontent, e) { },
    sortorder: "desc",
    viewrecords: false,
    pager: '#pager_grid_apport'
});

jQuery("#grid_apport").jqGrid('navGrid', '#pager_grid_apport', {
    edit: false,
    add: false,
    del: false,
    search: false,
    refresh: false
}).navButtonAdd('#pager_grid_apport', {
    caption: "",
    buttonicon: "ui-icon-excel",
    title: "Exporter vers excel",
    onClickButton: function () {},
    position: "last"
}).navButtonAdd('#pager_grid_apport', {
    caption: "",
    buttonicon: "ui-icon-linechart",
    title: "Verifier les bornes sur la carte",
    onClickButton: function () {},
    position: "last"
});
  

html-часть выглядит следующим образом :

 <div class="content_div" style="margin-left:5px">
  <table id="grid_apport"></table><div id="pager_grid_apport"></div>
  

вызов ajax выглядит следующим образом:

 $.ajax({
             type: "POST",
             url: '/xxx_web/Prelevement/getGridData',
             dataType: "json",
             data: {
                 date_debut: dijit.byId('start_date_apport').get("value"),
                 date_fin: dijit.byId('end_date_apport').get("value"),
                 selxml: viewerFrame.mapFrame.GetSelectionXML()
             },
             success: function (data) {
                 jQuery("#grid_apport").jqGrid("clearGridData");//erreur
                 jQuery("#grid_apport").jqGrid('setGridParam', {
                     datatype: 'local',
                     data: data
                 }).trigger("reloadGrid");

             }
         });
  

отображается ошибка: ошибка типа: b.jgrid.formatter не определен.
когда я комментирую эту строку, сетка работает, но не очищает данные при перезагрузке данных. чего мне не хватает ?! спасибо за ваше время.
это более подробная информация об этой странной ошибке, связанной с сеткой :

  • в вышеуказанных случаях ошибка блокирует выполнение, и данные не будут загружены в сетку.
  • если я удалю часть пейджера из сетки: pager: ‘#pager_grid_apport’, данные загружаются обычно без проблем, но мне нужен пейджер в моей сетке, так что это не решение.
  • если я удалю строку jQuery(«#grid_apport»).jqGrid(«clearGridData»); из вызова ajax данные будут загружены в сетку, но появится та же ошибка.

чего мне не хватает ?!

Редактировать :

данные представляют собой формат json, это конструкция json:

 var jsonData = 
(from item in data select new { 
code = item[1] == null ? "" : item[1].ToString(),
organisation = item[2] == null ? "" : item[2].ToString(),
nom = item[3] == null ? "" : item[3].ToString(),
date = item[4] == null ? "" : String.Format("{0:dd/MM/yyyy}", item[4]),
cote_a_8h = item[5] == null ? "" : item[5].ToString(),
volume_total = item[6] == null ? "" : item[6].ToString(),
debit = item[7] == null ? "" : item[7].ToString(),
apport = item[8] == null ? "" : item[8].ToString(),
volume_restitue = item[9] == null ? "" : item[9].ToString()
}).ToList();
  

Комментарии:

1. Какую версию jqGrid вы используете (можете использовать) и из какого форка jqGrid ( бесплатный jqGrid , коммерческий Guriddo jqGrid JS или старый jqGrid версии <= 4.7)? В каком формате содержатся элементы data массива, который вы используете? Не могли бы вы включить 2 элемента тестовых данных? Имеет ли свойство items уникальное id или какое-либо другое свойство, которое является собственным идентификатором элементов в серверной части ( /xxx_web/Prelevement/getGridData )?

2. спасибо @Oleg за воспроизведение, я использую jqGrid 4.4.1