Потеря отредактированных данных ячейки после подкачки - PullRequest
1 голос
/ 12 июля 2010

Я строю полностью "клиентскую" сетку, однако, если я включаю встроенное редактирование, сделанные мной изменения будут потеряны, если я изменю страницу сетки.

Надеюсь, кто-то может указать, что мне не хватает

Настройка Grid показана ниже вместе с функцией, которую я вызываю, чтобы заполнить ее тестовыми данными:

var myGrid;
var lastgridsel;
jQuery(document).ready(function() {
    myGrid = jQuery("#mygrid").jqGrid({
        datatype: 'local',
        colModel: [
            { name: 'AID', label: 'AID', index: 'AID', width: 100, editable: false,
              sorttype: "int" },
            { name: 'MS', label: 'MS', index: 'MS', width: 300, editable: false },
            { name: 'GROUP', label: 'GROUP', index: 'GROUP', width: 100,
              editable: false },
            { name: 'REV', label: 'REV', index: 'REV', width: 100,
              editable: false },
            { name: 'OPT', label: 'OPT', index: 'OPT', width: 100, editable: true,
              edittype: 'text' }
        ],
        pager: '#mypager',
        rowNum: 10,
        rowList: [10, 20, 500],
        viewrecords: true,
        loadonce: true,
        autowidth: true,
        sortname: 'AID',
        sortorder: 'desc',
        cellsubmit: 'clientArray',
        onSelectRow: function(id) {
            if (id && id !== lastgridsel) {
                jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray');
                jQuery('#mygrid').editRow(id, true);
                lastgridsel = id;
            }
        }
    });
});

var mydata = [];
function InitNew() {
    for (var i = 0; i < 100; i++) {
        mydata.push({ AID: i, MS: "123", GROUP: "456", REV: "78", OPT: "8" });
    }
    myGrid.setGridParam({ data: mydata }).trigger("reloadGrid");
}

Это показывает 10 страниц, 100 записей. Если щелкнуть столбец «OPT», я могу изменить значение в текстовом поле, а при щелчке другой строки данные будут сохранены. Однако, как только я перехожу на другую страницу и возвращаюсь на первую страницу, данные возвращаются к своему первоначальному значению.

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Я не уверен, является ли это ошибкой в ​​версии 3.7.x или нет, но в настоящее время, если вы сохраняете локальные данные с учетом встроенного редактирования (методы saveRow или editRow), параметр внутренних данных jqGrid будет без изменений .

Чтобы исправить проблему, вы можете определить функцию, как

var myAfterSave = function(rowid, response) {  // aftersavefunc
    var index = parseInt(rowid, 10);
    var d = myGrid.getGridParam("data");
    var rowdata = myGrid.getRowData(rowid);
    d[rowdata.AID].OPT = rowdata.OPT;
};

и изменить строки

jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray');
jQuery('#mygrid').editRow(id, true);

на линии

jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray', null, myAfterSave);
jQuery('#mygrid').editRow(id, true, null, null, 'clientArray', null, myAfterSave);
0 голосов
/ 13 июля 2010

Олег - спасибо миллион. Ваш ответ работает очень хорошо. Я разместил вопрос на официальном форуме поддержки jqgrid, и есть еще один обходной путь, который может помочь. Нить в http://www.trirand.com/blog/?page_id=393/help/losing-edited-cell-data-after-paging/#p18567.

Резюме: если вы строите сетку с использованием чистого клиентского кода, вам необходимо заменить

myGrid.setGridParam({ data: mydata }).trigger("reloadGrid");

с

myGrid.setGridParam({ data: mydata });
myGrid[0].refreshIndex();
myGrid.trigger("reloadGrid");
...