#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