Dans jqGrid, pouvez-vous modifier plusieurs lignes en même temps, puis effectuer un seul commit?

Nous utilisons la fonctionnalité jQuery('#grid').editRow() de jqGrid, qui vous permet de modifier des champs dans une ligne.

JqGrid prend-il en charge l’édition en ligne de plusieurs lignes à la fois, où je peux apporter des modifications à plusieurs lignes, puis les soumettre toutes en même temps?

Nous essayons d’éviter d’avoir à modifier chaque ligne une par une et à effectuer un “aller-retour” séparé sur le serveur à valider à chaque fois. Dans le cas où nous voudrions éditer en bloc un certain nombre de champs pour un certain nombre d’enregistrements un seul “commit”.

L’édition en ligne de plusieurs lignes n’est pas implémentée par jqGrid. Vous pouvez utiliser l’édition locale et publier manuellement toutes les modifications sur le serveur, mais vous devrez implémenter vous-même l’envoi de toutes les modifications.

Personnellement, je ne mettrais pas ce comportement en pratique dans mes projets. La raison en est que je pense que le site Web devrait toujours prendre en charge la concurrence (la concurrence optimiste a le plus de sens). Si une personne tente de soumettre les modifications au serveur, celui-ci peut répondre par une erreur d’access simultané: une autre personne a déjà modifié les données. Dans le cas où les données de la grid doivent être actualisées et la modification de la ligne doit être répétée. Je vois des problèmes avec la mise en œuvre de l’édition de plusieurs lignes en cas d’utilisation de la simultanéité optimiste. A quoi ressembleraient les messages d’erreur? Si plusieurs lignes sont modifiées, comment le message d’erreur devrait-il ressembler? Que doit faire l’utilisateur en cas d’erreur? Devrait-il / elle répéter le changement complet des données? Où sont les avantages du sharepoint vue des utilisateurs?

La soumission de l’édition d’une ligne était presque immédiatement dans toutes les implémentations de jqGrid que j’avais. Je ne vois donc pas le besoin de faire plusieurs lignes à la fois dans les projets. Les inconvénients pour l’utilisateur en cas d’erreurs de concurrence sont plus importants que les avantages de la réduction “aller-retour”. En raison de la très bonne connexion au serveur, l’envoi des données n’est pas un problème dans les environnements de mes clients.

La modification en ligne de plusieurs lignes n’est pas possible dans l’implémentation JQGrid d’origine. Dans l’implémentation initiale, chaque ligne que vous modifiez et perdez le focus est soumise.

Au lieu de cela, créez une implémentation personnalisée comme suit: 1. Remplacez (grid) le fichier grid.inline.js existant, écrivez vos propres lignes de assembly et enregistrez-les. 2. Dans la fonction de modification des lignes, configurez de manière à append les lignes modifiées (modifiées) à collecter séparément. 3. Dans la fonction de sauvegarde des lignes, vous ne pouvez envoyer que les lignes modifiées au serveur.

Et pour empêcher la mise à jour simultanée de mêmes données, vous pouvez avoir un mécanisme de contrôle de version de l’une des façons suivantes: 1. Créez un champ de version (masqué) pour toutes les lignes. Lorsqu’une ligne devient sale, incrémentez le champ de version. 2. Lors de la soumission des lignes, vérifiez le numéro de version existant et le nouveau. En cas d’incompatibilité, intimité avec l’utilisateur / mettez à jour l’existant. (Ceci, vous pouvez implémenter assez facilement)

C’est tout! J’espère que c’était utile! 🙂

Je ne connais pas beaucoup jqGrid, mais j’ai fait ce test simple (il se peut que je manque quelque chose):

  1. Aller à la page de démonstration de jqGrid http://www.sortingrand.com/blog/jqgrid/jqgrid.html
  2. Charger route édition / exemple de base.
  3. Exécutez ce code manuellement:

     jQuery("#rowed1").jqGrid('editRow', '11'); jQuery("#rowed1").jqGrid('editRow', '12'); jQuery("#rowed1").jqGrid('editRow', '13') 
  4. Modifier les trois lignes

  5. Exécutez ce code manuellement:

     jQuery("#rowed1").jqGrid('saveRow', '11'); jQuery("#rowed1").jqGrid('saveRow', '12'); jQuery("#rowed1").jqGrid('saveRow', '13'); 

Bien sûr, le paramètre url est requirejs et je pense que vous pouvez utiliser l’option de callback pour rassembler toutes les lignes modifiées.

J’espère que cela t’aides