Comment mettre à jour la valeur des données dans jqgrid

J’essaie de mettre à jour une cellule dans jqgrid de manière permanente lors du chargement. Je sais que je peux utiliser setCell mais cela ne fait que mettre à jour la valeur de cette page. Si je reviens à la page si je setCell pas explicitement, on setCell l’ancienne valeur setCell pour la cellule. J’ai aussi essayé setRowData mais il semble que ce soit la même chose. J’utilise la méthode loadonce car mon approche consiste à 1) charger les données 2) modifier quelques valeurs des données en fonction de certains critères 3) afficher les valeurs modifiées. Comme j’utilise loadonce , ne devrait-il pas y avoir un moyen de modifier une cellule de manière permanente dans cette session?

METTRE À JOUR:

Mettre dans mon code qui ne donne pas une erreur mais ne pas parcourir toutes les données:

 var set = 0; .... gridComplete: function(data){ setData(); }, .... beforeRefresh: function(data){ set = 0; }, .... function setData(){ if(set == 1) return; ... //create hash up here var dataArray = jQuery("#grid").jqGrid('getGridParam', 'data'); var j = 1; for (var rows in dataArray) { var key = dataArray[rows].name; dataArray[rows].level = hashTable[key]; j++; } alert(j); } 

Cela ne permet pas de parcourir tous les éléments du tableau chargés localement. Par exemple, si la taille de la page est définie sur 30, l’ alert(j) renvoie 30, malgré le nombre d’éléments que j’ai chargés localement. Toutefois, si j’actualise le graphique, j est le nombre correct. Pourquoi le comportement de getGridParam est-il différent dans chaque cas?

Si vous utilisez loadonce: true vous devez savoir les données locales seront conservées par jqGrid. jqGrid a deux options: data et _index . Les data sont un tableau d’éléments où chaque élément a la propriété name comme propriété name des colonnes de colModel . Si vous avez besoin de trouver l’élément par id (rowid), vous pouvez utiliser _index[rowid] pour l’élément avec l’id de rowid dans le tableau de data . Donc, pour changer les données dans la colonne 'myColumn' procédez comme suit:

 // first change the cell in the visible part of grid myGrid.jqGrid('setCell', rowid, 'myColumn', newValue); // now change the internal local data var dataArray = myGrid.jqGrid('getGridParam', 'data'), indexes = myGrid.jqGrid('getGridParam', '_index'); dataArray[indexes[rowid]].myColumn = newValue; 

MISE À JOUR : Vous pouvez utiliser la méthode getLocalRow documentée pour modifier les données locales:

 // first change the cell in the visible part of grid myGrid.jqGrid('setCell', rowid, 'myColumn', newValue); // now change the internal local data myGrid.jqGrid('getLocalRow', rowid).myColumn = newValue; 

Pour tous ceux qui sont venus ici de google, voici une réponse mise à jour!

L’important est l’index que vous pouvez obtenir en appelant getInd-Method. Parce que rowID! = Index of localRowData. (éq. rowId: jqg204, index: 5)

EDIT: si positionné “key: true” dans colmodel, vous pouvez définir votre propre rowId (différent de mon exemple “jqg ###”, généralement une PK d’une table de firebase database)

 var ind = myGrid.getInd(rowId); var localRowData = myGrid.jqGrid('getLocalRow', ind); localRowData.myColumn = newValue; 

J’espère que cela pourra aider!

J’ai eu un problème similaire:
Je devais mettre à jour une ligne sur une certaine action de l’utilisateur (non pertinent).
Pour cela, je devais connaître la ligne exacte de l’object ‘data’, même après un filtrage de la table.
J’ai donc trouvé un moyen d’identifier la ligne modifiée – j’ai ajouté une propriété RowID pour chaque élément de l’object ‘data’, lors de l’événement ‘loadComplete’:

 loadComplete: function () { if (firstRun) { firstRun = false; var dataArray = $('#jqGrid').jqGrid('getGridParam', 'data'); $(dataArray).each(function (index) { dataArray[index].RowID = index + 1; }); } } 

Et maintenant, au niveau du code du formateur, j’ai pu accéder à rData.RowID pour identifier la ligne exacte sur laquelle l’action a été effectuée et obtenir / définir sa représentation ‘data’