Чтобы удалить строку из сетки, вы можете использовать delRowData , но использование delGridRow также возможно после некоторых уловок. В ответе я разместил демонстрацию, в которой показано, как реализовать локальное редактирование формы . Основная идея решения - использовать настройку processing: true
. Вы можете удалить локальные данные в отношении delGridRow
, добавив дополнительные параметры $("#dagbok_grid").jqGrid("delGridRow", rowid, delSettings)
, где delSettings
можно определить следующим образом:
var delSettings = {
afterShowForm: function ($form) {
var form = $form.parent()[0], dialog;
// delete button: "#dData", cancel button: "#eData"
$("#dData", form).attr("tabindex", "1000");
$("#eData", form).attr("tabindex", "1001");
setTimeout(function () {
// set "Delete" button as default, so one can
// confirm deliting by pressing "Enter" key
$("#dData", form).focus();
}, 50);
dialog = $form.parent().parent();
dialog.position({
my: "center",
//at: 'center center',
of: grid.closest('div.ui-jqgrid')
});
},
// because I use "local" data I don't want to send the changes to the server
// so I use "processing:true" setting and delete the row manually in onclickSubmit
onclickSubmit: function (options) {
var gridId = $(options.gbox).attr("id").substr(5),
gridIdSelector = $.jgrid.jqID(gridId),
$grid = $("#" + gridIdSelector);
p = $grid[0].p, // jqGrid parameters
newPage = p.page,
rowids = p.multiselect ? p.selarrrow : [p.selrow];
// reset the value of processing option to true
// because the value can be changed by jqGrid
options.processing = true;
// delete the row
$.each(rowids, function () {
$grid.jqGrid('delRowData', this);
});
$.jgrid.hideModal("#delmod" + gridIdSelector,
{ gb: options.gbox,
jqm: options.jqModal,
onClose: options.onClose });
if (p.lastpage > 1) {// on the multipage grid reload the grid
if (p.reccount === 0 && newPage === p.lastpage) {
// if after deliting there are no rows on the current page
// which is the last page of the grid
newPage -= 1; // go to the previous page
}
// reload grid to make the row from the next page visable.
$grid.trigger("reloadGrid", [{page: newPage}]);
}
return true;
},
processing: true
};
Я бы предупредил вас о проблемах в пакетных модификациях данных, которые вы получаете с сервера. Проблема, с которой вы можете столкнуться, - ошибка одновременности . Другими словами, если два человека редактируют одну и ту же информацию. Пользователь может сначала загрузить информацию и редактировать информацию намного позже, не обновляя сетку с сервера. В то же время другой пользователь может изменить часть информации. Обнаружение таких ошибок не так просто, но еще сложнее создать хорошее сообщение об ошибке. Если пользователю придется внести все модификации еще раз, это очень разозлит пользователя вашей программы. См. здесь и здесь для получения дополнительной информации.