jQgrid после нажатия на кнопку Обновить сетку, все данные исчезают
Я новичок в программировании jqGrid. Я использую встроенное редактирование jQgrid с функцией добавления, редактирования и перезагрузки сетки. Когда я захожу на страницу, сетка загружается успешно. Но после нажатия на кнопку перезагрузки сетки все данные из сетки исчезают. Хуже всего то, что после клика, Ajax не обращается к веб-сервису. Я просматриваю код, но не обнаружил ошибок в коде. Ниже я дал весь код jqgrid, пожалуйста, обратитесь и дайте мне знать, где я ошибся.
function RenderOGPGrid() {
var oGrid = $('#tbOGP'), lastSel;
var topPagerSelector = '#' + $.jgrid.jqID(oGrid[0].id) + "_toppager";
oGrid.jqGrid({
url: sRelativePath + '/WSAjax.asmx/GetDataForGrid',
mtype: 'POST',
datatype: 'json',
ajaxGridOptions: {
contentType: "application/json; charset=utf-8"
},
serializeGridData: function (data) {
return JSON.stringify(data);
},
jsonReader: {
root: "d.rows",
page: "d.page",
total: "d.total",
records: "d.records"
},
onSelectRow: function (rowid) {
if (rowid && rowid != lastSel) {
if (typeof lastSel !== "undefined") {
$(this).jqGrid('restoreRow', lastSel);
}
lastSel = rowid;
}
updateButtonState($(this));
},
colNames: ['Id', 'Name', 'Age'],
colModel: [
{ name: 'Id', index: 'Id', width: 30},
{ name: 'Name', index: 'Name', width: 30},
{ name: 'Age', index: 'Age', width: 30},
],
prmNames: { page: "pageIndex", rows: "pageSize", sort: "sortIndex", order: "sortDirection", search: "_search" },
autowidth: true,
search: false,
postData: {
filters: null,
spName: 'GetOutwardGPList',
paramXML: ""
},
width: 'auto',
height: 'auto',
rowNum: 20,
rowList: [20, 50, 100, 150, 200],
sortname: "",
sortorder: "asc",
page: 1,
gridview: true,
autoencode: true,
viewrecords: true,
ignoreCase: true,
toppager: true,
footerrow: true,
editurl: 'clientArray',
gridComplete: function () {
$("#tbOGP").setGridParam({ datatype: 'local' });
$("table#tbOGP tr:last").addClass('ireg-jqgrid-lastrow');
$("tr.footrow td").addClass('ireg-jqgrid-lastrow').addClass('ireg-jqgrid-footer');
recalculateWidthInPercent('container', 'tbOGP', 0.96);
},
loadComplete: function () {
updateButtonState($(this));
},
caption: 'Outward Gate Pass List'
}).jqGrid('navGrid', topPagerSelector, {
add: false,
edit: false,
del: false,
search: false
//TckNo. iReg-444(DF01): Removed property refresh: false
}, {}, {}, {}, {}, {}).
jqGrid('inlineNav', topPagerSelector, {
addParams: {
useDefValues: true,
addRowParams: {
oneditfunc: function (rowid) {
updateButtonState($(this));
},
aftersavefunc: function (rowid, response) {
updateButtonState($(this));
},
afterrestorefunc: function () {
updateButtonState($(this));
}
}
},
editParams: myEditParams
});
}
1 ответ
Основное происхождение вашей проблемы в строке $("#tbOGP").setGridParam({ datatype: 'local' });
вашего кода. Я не понимаю цель линии. Я предполагаю, что вы получили строку из некоторого примера, который был создан для очень старой версии jqGrid. jqGrid поддерживает loadonce: true
хранение локальных данных начиная с версии 3.7. Если кто-то использует loadonce: true
тогда jqGrid автоматически изменится datatype
в "local"
после загрузки данных с сервера. Важно, что jqGrid сохраняет данные, загруженные с сервера, во внутреннем варианте. data
, Таким образом, перезагрузка данных, например, jqGrid с помощью data
вариант. В пути данные не будут рассеяны.
Так что одним из вариантов решения вашей проблемы будет удаление строки $("#tbOGP").setGridParam({ datatype: 'local' });
от gridComplete
перезвонить и добавить loadonce: true
вариант.
Еще один способ решить вашу проблему - сбросить datatype
в "local"
перед перезагрузкой. Можно использовать beforeRefresh
обратный вызов navGrid:
...
}).jqGrid('navGrid', topPagerSelector, {
add: false,
edit: false,
del: false,
search: false´,
beforeRefresh: function () {
$(this).jqGrid("setGridParam",{datatype: "json"});
}
//TckNo. iReg-444(DF01): Removed property refresh: false
}, {}, {}, {}, {}, {}).
...