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 
}, {}, {}, {}, {}, {}).
...
Другие вопросы по тегам