Извините, но ваш код глючит. Более того, я рекомендую переписать весь код и постараюсь объяснить, почему.
Первая важная ошибка заключается в том, что вы используете $('#invLocAdjustGrid').jqgrid({...});
в locationGrid
вместо $('#invLocAdjustGrid').jqGrid({...});
. JavaScript чувствителен к регистру, поэтому очень важно использовать jqGrid
вместо jqgrid
.
Следующая проблема существует, потому что вы используете некоторые переменные и функции tempID
, Ldclicked
и getMain
, которые вы не определили в размещенном коде.
После внесения минимальных изменений работает демоверсия . Я прокомментировал только «POST», чтобы использовать HTTP GET, потому что я получаю JSON непосредственно из файла и не имею активных компонентов на сервере wed.
Еще одна проблема, с которой вы столкнулись, заключается в том, что код вашего сервера сериализует результаты дважды . Обычно проблема возникает из-за неправильного использования ASMX WebMethods. Нужно , а не конвертировать объект в JSON вручную. Вместо этого нужно просто вернуть сам объект. Из-за проблемы свойство d
в JSON не является самим объектом и является строкой, которую необходимо проанализировать еще раз:
{
"d": "{\"total\":1,\"page\":0,\"records\":1,\"rows\":[{\"invPartLocId\":1053,\"inventoryMasterId\":5,\"location\":null,\"itemType\":\"S\",\"currentQanity\":1,\"adjustedQauntity\":0,\"newLocationQty\":0,\"deptCode\":\"1401 \"}]}"
}
Даже такие неправильно отформатированные данные могут быть прочитаны jqGrid без использования datatype
в качестве функции. Более того, вы всегда должны использовать gridview: true
и никогда не использовать afterInsertRow
и почти никогда не использовать addRowData
. Модифицированный код может быть примерно следующим:
var tempID = "abc";
$('#invLocAdjustGrid').jqGrid({
url: "INV_Inventory_Adjustment.aspx/getInventoryLocationById",
mtype: "POST",
datatype: "json",
postData: {
id: function () { return tempID; } // ??? I don't know which data should be send
},
ajaxGridOptions: { contentType: "application/json" },
serializeRowData: function (data) {
return JSON.stringify(data);
},
beforeProcessing: function (data) {
$.extend (true, data, $.parseJSON(data.d));
},
jsonReader: {repeatitems: false},
loadonce: true,
colNames: ['invPartID', 'locationPartID', 'Loctaion', 'Type', 'Current QTY', 'Adjusted QTY', 'New Location QTY', 'Dept. Code'],
colModel: [
{ name: 'invPartLocId', width: 2, key: true, hidden: true },
{ name: 'inventoryMasterId', width: 2, hidden: true },
{ name: 'location', width: 250 },
{ name: 'itemType', width: 120, align: 'center' },
{ name: 'currentQanity' },
{ name: 'adjustedQauntity' },
{ name: 'newLocationQty ' },
{ name: 'deptCode' }
],
cmTemplate: {sortable: false, width: 50},
pager: '#rptCodesPager',
viewrecords: true,
gridview: true,
loadui: "block",
height: 290,
width: 890,
ondblClickRow: function (rowid) {
//Ldclicked(rowid);
}
});
Следующая демонстрация демонстрирует, что код работает. Я включил в демо опцию loadonce: true
, которая также может быть полезна для вас.