Редактирование формы jqgrid: вопросы о действиях после удаления строки - PullRequest
1 голос
/ 18 марта 2012

После долгих поисков мне удается удалить строку в 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 Ответ

1 голос
/ 19 марта 2012

Я думаю, что ваша настоящая проблема не в перезагрузке сетки после удаления строки. Сетка, которая будет создана 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, который вы хотите отобразить как сообщение об ошибке. См. ответ , этот или этот для получения дополнительной информации.

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