Édition de formulaire jqgrid: questions sur les actions après la suppression d’une ligne

Après de longues recherches, j’ai réussi à supprimer une ligne dans un jqgrid avec l’édition de formulaire.

Mais, il rest deux petites choses:

  • Comment recharger la grid avec la ligne supprimée?
  • Si la ligne ne peut pas être supprimée, comment afficher les informations et pourquoi?

J’ai essayé de rechercher dans les arguments passés à la fonction dans l’événement “afterSubmit”, mais il n’y a pas de véritable explication sur la façon de manipuler ces arguments.

La création de la grid:

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}; } }); 

La navigation:

 $("#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").sortinggger('reloadGrid'); $("#eData").click(); // clic sur "Annuler" return [true,"Supression réussie"]; } }); 

Quelles sont les valeurs de “réponse” et de “données”? Comment recharger la grid?

La ligne est effectivement supprimée dans la firebase database avec l’URL ‘Adminuser’ (écrit en java).

Je pense que votre vrai problème n’est pas le rechargement de la grid après la suppression de la ligne. La grid qui sera créée par tableToGrid a le datatype: 'local' et le rechargement des données du serveur n’est pas nécessaire.

Votre vrai problème est le bogue de jqGrid 3.4.1 qui est corrigé (voir ici ) dans le code de jqGrid. La ligne supprimée ne sera donc pas supprimée de la grid. Le problème est la ligne de code:

 toarr = postdata.split(","); 

Le bogue est que postdata est déjà un tableau et non la chaîne. Donc, une exception à la ligne et les lignes suivantes qui suppriment la ligne de la grid ne seront pas exécutées. Pour résoudre le problème, vous pouvez utiliser la dernière version du code jqGrid du github ou modifier la ligne ci-dessus (elle porte le numéro de ligne 8282 dans jquery.jqGrid.src.js ) pour:

 toarr = postdata; 

ou téléchargez la version modifiée de jquery.jqGrid.src.js ici . Après cela, vous pouvez supprimer la ligne avec $("#TabUser").sortinggger('reloadGrid'); à partir de votre code et tout fonctionnera correctement: voir la démo .

Pour signaler les informations d’erreur du serveur dans la zone “Supprimer” de la ligne, vous devez simplement définir le code d’état de l’erreur dans la réponse HTTP. Vous pouvez également définir le rappel errorTextFormat qui reformate la réponse du serveur au fragment de code HTML que vous souhaitez afficher en tant que message d’erreur. Voir la réponse , celle-ci ou celle-ci pour plus d’informations.