Основная проблема в том, что для выбора строки вам нужно знать идентификатор новой строки.В большинстве случаев идентификатор будет генерироваться базой данных, в которой вы сохраняете данные на сервере.Поэтому первое требование к коду вашего сервера - вернуть идентификатор новой строки в ответе сервера на операцию «добавить».
Например, код вашего сервера возвращает идентификатор вашей строки в качестве ответа на запрос.операция «добавить».
$("#list").jqGrid('navGrid', '#pager', {/*navGrid options*/}, {/*Edit optoins*/}, {
/*Add options:*/
reloadAfterSubmit: false,
afterSubmit: function (response) {
return [true, '', response.responseText];
},
addedrow: "last", // add new row at the end of grid
afterComplete: function (response, postdata) {
// this.gbox is the string like "#gbox_list"
var gridId = this.gbox.substr(6);
//if (postdata.oper === "add") {
// // highlight the new "added" row
// var row = $("#" + $.jgrid.jqID(postdata.id));
// row.effect("highlight", {}, 3000);
//}
$('#' + gridId).jqGrid('setSelection', postdata.id);
}
});
В закомментированной части afterComplete
я показал, как можно использовать эффект подсветки jQuery UI , чтобы выделить новую добавленную строку (см. старый ответ ).Это может быть альтернативой выбору строки.Вы также можете использовать эффекты выделения и выделения.
Опция reloadAfterSubmit: false
имеет как минимум два недостатка.
- Если использовать отсортированные данные в сетке (параметр
sortname
jqGrid не пустой) строки сетки будут неправильно отсортированы после того, как новая строка будет добавлена в качестве первой или последней строки в сетке. - Если сетка имеетЕсли максимальное количество строк на странице (определено параметром
rowNum
), добавление новой строки будет следовать за сеткой со слишком большим количеством строк на странице.
Таким образом, вы можете сделать следующее
var idToSelect;
$("#list").jqGrid({
// ... all jqGrid options
loadComplete: function () {
if (idToSelect) {
$(this).jqGrid('setSelection', idToSelect);
//$("#" + $.jgrid.jqID(idToSelect)).effect("highlight", {}, 3000);
idToSelect = undefined;
}
}
}).jqGrid('navGrid', '#pager', {/*navGrid options*/}, {/*Edit optoins*/}, {
/*Add options:*/
afterSubmit: function (response) {
// save the id of new row. If the format of the data returned from
// the server is different you should change the next row
// corresponds to the returned data. For example if the server returns
// back JSON data in the form {"myId":"123"} you should use
// $.parseJSON(response.responseText).myId
// instead of response.responseText below
idToSelect = response.responseText;
return [true, '', response.responseText];
}
});
В случае, если будет добавлена новая добавленная строка после перезагрузки сетки.