Comment mettre à jour la valeur des données dans jqgrid
Je suis en train de mettre à jour une cellule dans jqgrid en permanence sur le chargement. Je sais que je peux utiliser setCell
mais que seules les mises à jour de la valeur de cette page. Si je reviens à la page si je n'ai pas explicite effectuer une autre setCell
pour la cellule, l'ancienne valeur est affichée. J'ai aussi essayé de setRowData mais il semble être en train de faire la même chose. Je suis à l'aide de la loadonce
mon approche est à 1) charger les données 2) modifier quelques valeurs des données en fonction de certains critères 3) montrent les valeurs modifiées. Comme je suis en utilisant loadonce
ne devrait pas y avoir un moyen de modifier une cellule de façon permanente dans cette séance?
Mise à JOUR:
Mettre dans mon code qui n'est pas de donner une erreur, mais à défaut de 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);
}
Ce n'est pas à vélo à travers tous les éléments du tableau qui sont localement chargé. Par exemple, si la taille de la page est définie sur 30, le alert(j)
renvoie 30, en dépit de la façon dont beaucoup d'articles que j'ai en local chargé. Cependant, si j'ai actualiser le graphique de la j est le nombre correct. Pourquoi le comportement de getGridParam différentes dans chaque cas?
source d'informationauteur WildBill
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez
loadonce: true
vous devez savoir où les données locales se tenir par jqGrid. jqGrid a deux options:data
et_index
. Ledata
est tableau d'éléments où chaque élément est le nom de la propriété que laname
propriété des colonnes decolModel
. Si vous avez besoin de trouver l'élément par son id (rowid), vous pouvez utiliser_index[rowid]
à l'élément avec l'id de ligne dans ledata
tableau. Donc pour modifier les données dans la colonne'myColumn'
vous devez effectuer les opérations suivantes:Mis à JOUR: Vous pouvez utiliser documenté getLocalRow méthode pour modifier les données locales:
Pour tous ceux qui sont venus ici de google, voici une mise à jour de réponse!
important, c'est l'index, que vous pouvez obtenir en appelant getInd-Méthode. Parce que rowID != indice de localRowData. (eq. rowId: jqg204, Index: 5)
EDIT: si la valeur "true" dans colmodel vous pouvez définir votre propre rowId (diffrent de mon exemple "jqg###", généralement un PK à partir d'une table de base de données)
espère que ça aide!
J'ai eu un problème similaire:
J'avais besoin de mettre à jour une ligne sur un certain utilisateur de l'action (pas d'importance).
Pour cela, j'ai besoin de savoir l'exacte ligne de la "data" objet, même après un filtrage de la table.
J'ai donc trouvé un moyen d'identifier la ligne qui a été changé - j'ai ajouté un RowID propriété pour chaque élément de la "data" de l'objet, à la loadComplete de l'événement:
Et maintenant, au formateur de code, j'ai pu accéder à rData.RowID pour identifier exactement la ligne sur laquelle la mesure a été prise, et pour obtenir/définir ses "données" de la représentation