как изменить rowid - PullRequest
       1

как изменить rowid

0 голосов
/ 27 февраля 2012

Я добавляю новые строки с идентификатором "new".После сохранения строки с новым значением в столбце, обозначенном как id (скажем, «код»), она остается с идентификатором «new», если я не перезагружу сетку или не удалю строку и не добавлю ее снова с новым идентификатором.

Есть ли другая функция для изменения идентификатора строки после сохранения строки?

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 июля 2012

Для изменения идентификатора требуется несколько шагов, так как jqGrid не меняет первичный ключ сетки, поэтому мы должны вручную выполнить все шаги:

var new_id = 39; //for example
aftersavefunc: function( old_id ) {

   //get data param
   var row = grid.jqGrid('getLocalRow', old_id);
   console.log(row); //use for firefox test
   row._id_ = new_id;

   grid.jqGrid('setRowData',old_id,{my_id:new_id});
   $("#"+response).attr("id", new_id); //change TR element in DOM

   //very important to change the _index, some functions using the                  
   var _index = grid.jqGrid('getGridParam', '_index');
   var valueTemp = _index[old_id];
   delete _index[old_id];
   _index[new_id] = valueTemp;
}
1 голос
/ 27 февраля 2012

Вы можете использовать jQuery.attr , чтобы установить любой атрибут включительно id. Вы должны быть очень осторожны с изменением атрибута id. Например, если вы используете опцию loadonce: true или если вы используете datatype: 'local', существуют внутренние параметры data и _index, которые кэшируют текущий идентификатор для сопоставления данных строки. Так что в этом случае вам нужно будет обновить _index параметров jqGrid.

Если у вас возникнут проблемы с реализацией, вы должны опубликовать код, который вы используете в данный момент. Некоторые параметры jqGrid (например, datatype, loadonce) очень важны для понимания. Кроме того, важно знать, какой режим редактирования и в каком для вас режиме.

0 голосов
/ 21 февраля 2018

Функция is changeRowId в jqgrid:

function aftersavefunc(rowId, response) {

var json = $.parseJSON(response.responseText);
var $tr = $("#" + rowId);

    setTimeout(function () {
        $grid.jqGrid("changeRowid", rowId, json.Id);
        $grid.jqGrid('setSelection', json.Id);
        setFocusToGrid();
    }, 1000);
}

setTimeout требуется, поскольку jqgrid восстанавливает старый идентификатор строки после вызова aftersavefunc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...