jqGrid - modification intégrée de détection sale / cellules modifiées
est-il un exemple d'utilisation de jqgrid de getChangedCells
méthode pour déterminer si les données ont changé?
Je grepped getChangedCells dans le des démos téléchargeables pour
jqgrid, et ne pouvait trouver la définition de la fonction, de ne pas
exemples d'utilisation de getChangedCells.
Ce que je veux faire est d'enregistrer les modifications d'un utilisateur
fait si l'utilisateur clique sur une autre ligne. Mais, je ne
souhaitez soumettre la sauver si la ligne est sale.
Merci d'avance,
--Nate
- +1 C'est une bonne question.
- Sérieusement, c'est un gooood un! J'espère avoir plus de voix à vous donner 🙁
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas sûre sale drapeau sur la ligne. Vous pouvez utiliser le fait que, au début de la ligne d'édition (au début de la d'édition en mode) la méthode editRow ajouter
editable="1"
attribut de la ligne de grille (<tr>
élément). Plus tard, les méthodes saveRow et restoreRow les changements de la valeur de l'attributeditable="0"
. Si les lignes de la page en cours qui a été au moins une fois dans l'édition en mode sera leeditable
attribut. Si l'id de l'élément de la table est de type "liste", vous trouverez le fichier les lignes avecLes id des éléments de l'ensemble sont les rowids de lignes.
Si vous utilisez le fichier d'échange dans la grille, vous devez être prudent et enregistrer l'id de la modification des lignes sur la page en cours avant le changement de la page. Le onPaging événement qui pourrait vous aider ici.
À mon avis le meilleur et le plus sûr moyen de faire ce que vous avez besoin est d'utiliser
aftersavefunc
paramètre de la editRow ou saveRow méthodes (probablement vous utilisez directement editRow). À l'intérieur de votreaftersavefunc
fonction, vous pouvez enregistrer l'id de la ligne modifiée dans un tableau/carte. Cela permettra de résoudre votre problème et de travail sécuritaire.$("#list tr[editable]")
pour réduire le nombre de lignes dont vous avez besoin d'envoyer au serveur. Vous pouvez voir les lignes qui sont définitivement pas changé. Comme je l'ai écrit plus tard, vous pouvez utiliseraftersavefunc
à suivre les changements. Il va travailler en sécurité.editurl
et de sauvegarder les données directement sur le serveur. Il évite beaucoup de problèmes (erreurs de traitement côté serveur, comme le contrôle de concurrence par exemple) et de simplifier le code. De plus on ne devrait pas modifier plus d'une ligne en même temps. Il y a plus de solutions de rechange, mais c'est varier important de connaître précisément l'utilisation de jqGrid et la version de la fourche et de jqGrid que vous utilisez.datatype
vous utilisez? Utilisez-vousloadonce: true
ou pas? En général, édition en ligne permet de spécifieraftersavefunc
de rappel. Vous pouvez étendre les données locales avec la propriété supplémentaire (par exemple booleansaved
de la propriété). Vous pouvez grep tous les éléments, qui ontsaved: true
de la propriété. Sinon, vous pouvez tenir la carte avec des id de sauvé/articles modifiés et avoir les mêmes résultats. Un besoin tout simplement d'utiliseraftersavefunc
de rappel.dirty
bien pour un élément local après modification. Il utilise jqGridafterSetRow
de rappel qui existent sur gratuit jqGrid seulement, mais vous pouvez utiliser la même idée avec de vieux jqGrid 4.6.0 et à utiliseraftersavefunc
rappel de modification en ligne.datatype: json, loadonce: default
datatype: "json"
sansloadonce: true
) puis il y a existent pas de données qui peut être modifié par l'utilisateur. Quiediturl
vous utilisez? Si l'utilisateur modifie les données à l'égard de la modification en ligne, puis les données seront enregistrées sur le serveur et le rechargement des données de retour de nouvelles données. Je peux deviner que l'utilisateur est édition les données. Je veux dire que certains ligne est en mode d'édition. Vous pouvez détecter les cas par l'utilisation de lasavedRow
paramètre de jqGrid. Si la longueur du tableausavedRow
n'est pas 0, alors il existe existe au moins une ligne dans le mode d'édition.editRow
directement (à l'intérieur deonSelectRow
par exemple) ou d'utiliserinlineNav
ou vous utilisezformatter: "actions"
. Tout ce que vous expliquer, je peut l'interpréter de plusieurs façons. Indirectement, à partir de vos questions, je suppose que vous avez le problème parce que vous utilisez d'édition en ligne dans le mauvais sens (mais je ne sais pas comment vous le faites). Je pense que vous essayez de résoudre le problème, qui ne devrait pas exister, et donc vous devez corriger le code lorsque vous utilisez l'édition en ligne. Avez-vous essayéaftersavefunc
?savedRow
option de jqGrid. Ainsigrid.jqGrid("getGridParam", "savedRow")[0]
contient les informations dont vous avez besoin.Enfin, j'ai réussi à mettre un morceau de code pour détecter ce que nous voulons 😉
Espérons que tout jqgrid gourous là (comme Oleg), ont suffisamment de temps pour examiner le présent code et de l'améliorer.
L'exemple de code de travail pour détecter la modification des données dans une grille avec un champ modifiable nommé "nom". Si vous souhaitez vérifier les données modifiées dans plusieurs colonnes, vous devez ajouter les variables
after_edit
etbefore_edit
associée avec des colonnes.Pour obtenir les précédentes données de la cellule à l'intérieur de la
onSelectRow
fonction, je n'ai pas utilisé legetCell
méthode parce qu'en dit la documentation en rouge:Par la honte j'ai pu vérifier que la documentation était à droite :(.
Cependant, le
getCell
fonction fonctionne correctement avec la cellule de données.Et voici le code:
Dans un de mes projets, je ne les suivants: avant de modifier la ligne je me souviens de la ligne de données dans une variable globale et une fois le montage fait, il suffit de vérifier si la ligne de données a été modifié. Quelque chose comme ceci (mode édition activé par un double clic):
var beforeEditData;
À l'aide de MVC4 et JQuery c'est ce que j'ai fait
Dans la Vue
dans le Modèle
La gridInitialised code pour gérer les modifications apportées au filtre de recherche.
Dave
Oleg mentionné 5 (wow) il y a des années - j'ai utilisé le saveRow fonction et a passé le drapeau comme
extraparam
.quelque chose comme cela, en supposant que votre "modèle" ou une colonne masquée
IsDirty
dans mon cas:puis une boucle sur les lignes sur Enregistrer cliquez sur (bouton externe dans mon cas), quelque chose le long des lignes de: