Редактирование формы jqgrid: вопросы о действиях после удаления строки
После долгих поисков мне удается удалить строку в jqgrid с редактированием формы.
Но осталось две мелочи:
- Как перезагрузить сетку с удаленной строкой?
- Если строка не может быть удалена, как отобразить информацию и почему?
Я пытался искать в аргументах, передаваемых функции в событии "afterSubmit", но нет реальных объяснений о том, как манипулировать этими аргументами.
Создание сетки:
tableToGrid("#TabUser", {
caption: 'Gestion des Utilisateurs',
width: 'auto',
height: "auto",
hidegrid: false,
pager:'#DivUser',
rowNum:10,
cellEdit: true,
cellsubmit: 'remote',
cellurl: 'Adminuser',
colModel: [{name:'Id', editable:false, width:50},
{name:'Login', editable:false, width:150},
{name:'Nom', editable:true, width:200},
{name:'Prénom', editable:true, width:200},
{name:'Rôle', editable:true, width:80, edittype:'select',
editoptions: { multiple: false, value:{ADMIN:'ADMIN',GUEST:'GUEST'}}},
{name:'Email', editable:true, width:200}],
beforeSubmitCell: function(rowid, celname, value, iRow, iCol) {
var rowData = jQuery(this).getRowData(rowid);
var idUser= rowData['Id'];// On récupère l'Id du user en cours d'édition
return {idUser:idUser}; }
});
Навигация:
$("#TabUser").navGrid('#DivUser',
{edit:false,add:false,del:true,search:false},{}, {},
{width:500, url:'Adminuser',
reloadAfterSubmit:true,
onclickSubmit: function(param){
var sr = jQuery('#TabUser').getGridParam('selrow');
var idUser = jQuery('#TabUser').getCell(sr,'Id');
return {idUser:idUser}; },
afterSubmit: function(reponse, data) {
$("#TabUser").trigger('reloadGrid');
$("#eData").click(); // clic sur "Annuler"
return [true,"Supression réussie"];
}
});
Каковы значения "ответ" и "данные"? Как перезагрузить сетку?
Строка эффективно удаляется в базе данных с помощью URL-адреса "Adminuser" (написано на Java).
1 ответ
Я думаю, что ваша настоящая проблема не в перезагрузке сетки после удаления строки. Сетка, которая будет создана tableToGrid
иметь datatype: 'local'
и перезагрузка данных с сервера не требуется.
Ваша настоящая проблема - ошибка в jqGrid 3.4.1, которая исправлена (см. Здесь) в коде jqGrid. Таким образом, удаленная строка не будет удалена из сетки. Проблема в строке кода:
toarr = postdata.split(",");
Ошибка в том, что postdata
это уже массив, а не строка. Таким образом, одно исключение в строке и последующие строки, удаляющие строку из сетки, не будут выполнены. Чтобы решить эту проблему, вы можете использовать последнюю версию кода jqGrid из github или изменить указанную выше строку (она имеет номер строки 8282 в jquery.jqGrid.src.js
) чтобы
toarr = postdata;
или загрузите модифицированную версию jquery.jqGrid.src.js
здесь После этого вы можете удалить строку с $("#TabUser").trigger('reloadGrid');
из вашего кода и все будет работать правильно: посмотрите демоверсию.
Чтобы сообщить информацию об ошибке с сервера в "Удалить" строки, вам просто нужно установить код ошибки в HTTP-ответе. Вы можете дополнительно определить обратный вызов errorTextFormat, который переформатирует ответ сервера на фрагмент кода HTML, который вы хотите отобразить как сообщение об ошибке. Смотрите ответ, этот или этот для дополнительной информации.