jqGrid getLocalRow renvoyant false lorsque la propriété de données est définie

getLocalRow problèmes avec getLocalRow avec la propriété data

 var $grid; getGrid = function () { $grid = $("list"); $grid.jqGrid({ mtype: "POST", colNames: [], colModel: [ .... ], pager: "", loadonce: true, multiselect: true, gridComplete: function () { var data = $(this).getDataIDs(); for(var i=0; i < data.length;i++){ $(this).setSelection(data[i]); // select all rows by default } }, loadComplete: function (data) { }, loadError: function (xhr) { } }); return $grid; }; 

Il existe deux manières de renseigner la grid en fonction de deux scénarios.
Dans le scénario 1, je frappe simplement l’URL du serveur, je renvoie les données au format JSON et les remplis dans la grid. À l’aide de cette option, lorsque j’effectue une itération sur les lignes sélectionnées et que j’obtiens getLocalRow, j’obtiens le ou les points requirejs.

Et dans le scénario 2, je construis un object de données et le passe à la même grid. Le problème se produit ici lorsque j’itère et utilise getLocalRow dans ce contexte. L’obtention de false pour toutes les lignes sélectionnées au lieu des données de ligne, mais fonctionne correctement avec getRowData.

Scénario 1 :

 $grid.jqGrid("clearGridData"); $grid.jqGrid("setGridParam", {url: '..', datatype: "json"}).sortinggger("reloadGrid"); 

scénario 2:

 $grid.jqGrid("clearGridData"); $grid("setGridParam", { data: MyOWNobject}).sortinggger("reloadGrid"); 

Accéder à getLocalRow:

 var sel=[]; for (i = 0; i < $grid.jqGrid("getGridParam").selarrrow.length; i++) { sel.push($grid.jqGrid("getLocalRow", $grid.jqGrid("getGridParam").selarrrow[i])); } 

Le problème réside dans le remplissage de la grid. Chaque ligne de la grid doit avoir un id unique. Si vos données ont déjà une colonne avec des données uniques, vous pouvez utiliser key: true dans la colonne pour indiquer à jqGrid d’utiliser la valeur de la colonne comme identifiant de ligne.

J’ai testé la dernière fois que jqGrid était libre, toujours avec les données, qui contenaient l’une ou l’autre des propriétés id dans chaque colonne de la propriété have key: true pour une colonne dont la valeur valait être utilisée comme rowid. Si vous suivez la règle, le problème que vous signalez n’existera pas. Voir la démo http://jsfiddle.net/OlegKi/y9KHY/92/ qui utilise le code

 $("#submit1").click(function () { var $grid = $("#gGrid"); var grps = [ { Name : "A", Group : "11" }, { Name : "B" , Group : "1122" } ]; $grid.jqGrid({ data: grps, colModel: [ { name: 'Name', key: true }, { name: 'Group' } ], cmTemplate: {width: 200}, rownumbers: true, multiselect: true, gridComplete: function () { $("#cb_" + this.id).click(); } }); }); $("#submit2").click(function () { var $grid = $("#gGrid"), p = $grid.jqGrid("getGridParam"), i; for (i = 0; i < p.selarrrow.length; i++) { alert("Data > " + JSON.ssortingngify($grid.jqGrid("getLocalRow", p.selarrrow[i]))); } }); 

La démo http://jsfiddle.net/OlegKi/y9KHY/93/ utilise la propriété id dans les données d’entrée.

Néanmoins, l’utilisation de données d’entrée non complètes sans spécifier rowid est autorisée en général. Ainsi, le comportement décrit ci-dessus de jqGrid gratuit est un bogue. Les bugs sont déjà corrigés dans le code de free jqGrid sur GitHub. Vous pouvez le vérifier dans la démo http://jsfiddle.net/OlegKi/y9KHY/94/ , qui utilise le code directement à partir de GitHub. Je prévois de publier la prochaine version bientôt.