jqGrid ligne(s) suppression
J'ai un bouton permet de supprimer une ligne si vérifié que les appels à la fonction intégrée 'delRowData'. Assez Simple jusqu'à ce que vous souhaitez supprimer un tableau de lignes/plusieurs lignes (comme dans la variable intégrée 'selarrrow'). Quelqu'un aurait-il une meilleure réponse que l'horrible boue je suis venu avec (eg. modification de base jqGrid code)??
Voici mon code:
$("#deleteButton").cliquez sur(function(){ var gr = jQuery("#myGrid").jqGrid('getGridParam','selarrrow'); var su=jQuery("#myGrid").jqGrid('delRowData',gr.toString()); (su) ? ": alert("Déjà supprimé ou non dans la liste"); });
et maintenant, pour la vraiment méchant partie de modifier le code de base dans jquery.jqGrid.min.js:
delRowData:function(f){
for(var m=0,max=f.length;m<max;m++){
var j=false,i,c;
this.each(function(){
var e=this;
if(i=e.rows.namedItem(f[m])){
b(i).remove();
e.p.records--;
e.p.reccount--;
e.updatepager(true,false);
j=true;
if(e.p.multiselect){
c=b.inArray(f[m],e.p.selarrrow);
c!=-1&&e.p.selarrrow.splice(c,1)
}
if(f==e.p.selrow)e.p.selrow=null
}else return false;
if(e.p.datatype=="local"){
var k=e.p._index[f[m]];
if(typeof k!="undefined"){
e.p.data.splice(k,1);
e.refreshIndex()
}
}
});
}
/*if(e.p.altRows===true&&j){
var n=e.p.altclass;b(e.rows).each(function(a){
a%2==1?b(this).addClass(n):b(this).removeClass(n)
})
}*/
return j
}
Est-il une meilleure façon de le faire?
/* De nouveaux détails **/
Donc, même si on itère sur la jqGrid tableau "selarrrow" et d'enlever les lignes une par une tout en utilisant jqGrid par défaut de 'delRowData fonction:
$("#deleteButton").cliquez sur(function(){ $.chaque($("#myGrid").jqGrid('getGridParam','selarrrow'), function(index, valeur) { console.log($("#myGrid").jqGrid('getGridParam','selarrrow')); if ($("#myGrid").jqGrid('delRowData', valeur)) { console.log($("#myGrid").jqGrid('getGridParam','selarrrow')); console.log(valeur); } else{ console.log($("#myGrid").jqGrid('getGridParam','selarrrow')); console.log(valeur); } }); });
vous verrez le code ne fonctionne pas correctement et nous devons revenir pour regarder la jqGrid de base-code de la fonction de "delRowData'. Le problème réside maintenant avec la façon dont il aborde le tableau. Voici la fonction de l'onu-compacte:
delRowData:fonction(f){ var j=false,i,c; c'.each(function(){ var e=ce; si(i=e.les lignes.namedItem(f)){ b(i).remove(); e.p.enregistrements--; e.p.reccount--; e.updatepager(true,false); j=true; si(e.p.multiselect){ c=b.inArray(f,e.p.selarrrow); //c!=-1&&e.p.selarrrow.splice(c,1) } si(f=e.p.selrow) e.p.selrow=null }else return false; si(e.p.datatype=="local"){ var k=e.p._index[f]; if(typeof k!="undefined"){ e.p.les données.splice(k,1); e.refreshIndex() } } si(e.p.altRows===true&&j){ var n=e.p.altclass; b e.les lignes).each(function(a){ a%2==1?b(cette).addClass(n):b(cette).removeClass(n) }) } }); retour j }
Le problème, c'est le commentaire sur la ligne dans le milieu de la fonction. Je voulais vraiment éviter le piratage de base de code, mais il semble que vous avez à faire sauf si vous avez une meilleure idée.
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas utiliser chacune à l'extérieur, au lieu de piratage de la base?
.each()
-- je l'ai mis à jourLe problème est que getGridParam est de retourner une référence pour les lignes sélectionnées (selarrrow). Vous puis de les utiliser pour parcourir un supprimer des lignes de la grille, ce qui modifie selarrow sur la ligne que vous avez identifié. Cela modifie la collection que vous avez à parcourir, ainsi que les itérations suivantes n'ont plus de point pour les valeurs correctes.
Vous pouvez utiliser $.MakeArray pour itérer à travers une copie de la sélection des tableaux, ou effectuer une itération à partir de la queue de la matrice, par exemple:
Il y a une discussion sur ce sujet à: http://www.trirand.com/blog/?page_id=393/bugs/delrowdata-bug-on-grid-with-multiselect/
$.jgrid.no_legacy_api = false;
ou il échouera.jqGrid supprime la ligne supprimée de selarrrow - flèche.
L'une des façon de faire de multiples suppression de ligne est à l'aide de