2011-08-25 5 views
1

Eh bien, je me tape la tête contre le mur avec celui-ci parce que j'ai utilisé jqgrid dans de nombreuses applications et le code similaire fonctionne dans tous les autres cas, mais cela! Voici le code ...jqgrid filterToolbar ne fonctionne pas

var pfct = $("#pfc_table"); 
pfct.jqGrid({ 
     url: 'costs', 
     datatype: 'json', 
     'postData': JSON.stringify(getConds()), 
     mtype: 'POST', 
     colNames:['Id','Name','Formula','Conditions'], 
     colModel :[ 
      {name:'id', index:'id', width:40, search:true}, 
      {name:'name', index:'name', width:130, search:true}, 
      { 
       name:'formula', index:'formula',width:310, search:true, 
       formatter : function(value, options, rData){ 
        return value.substring(value.indexOf('=')+1); 
       } 
      }, 
      {name:'conditionstr', index:'conditionstr', width:160,search:true} 
     ], 
     jsonReader: { 
      repeatitems:false, 
      root: function (r) { return r.data.rows; }, 
      page: function (r) { return r.data.currpage; }, 
      total: function (r) { return r.data.totalpages; }, 
      records: function (r) { return r.data.totalrecords; } 
     }, 
     gridComplete: function() { 
     }, 
     gridview: true, 
     height: 'auto', 
     autowidth: true, 
     pager: '#pfc_pager', 
     rowNum:25, 
     viewrecords: true, 
     loadonce: true, 
     ignoreCase: true, 
     multiselect: false, 
     pagination: true 
}); 
pfct.navGrid('#pfc_pager',{edit:false,add:false,del:false,search:false,refresh:false}); 
pfct.jqGrid('filterToolbar',{stringResult: true,searchOnEnter: false}); 

Les données JSON je suis envoyais ont quelques propriétés supplémentaires qui ne sont pas définies dans le colmodel mais cela n'a jamais été un problème dans le passé. Le tri local et la pagination fonctionnent bien, mais pas le filtrage! Pour mémoire c'est ce que les données ressemble à:

{"data":{"totalpages":1,"currpage":1,"totalrecords":10,"rows":[{"name":"Test","id":18195,"level":0,"currency":"EUR","default":true,"formula":"f_18195()=110","ownerId":1,"categoryName":"Test cat","parentId":0,"rebate":0,"portDues":true,"modified":1310036286000,"conditionstr":"Condition 1, Condition 2"}],"userdata":null},"status":true,"responseError":null} 
+0

Voulez-vous dire que le filtrage dans la colonne 'nom' ne fonctionne pas ou que vous avez un problème avec le filtrage dans toutes les colonnes? Que fait la fonction 'getConds'? Pourriez-vous poster le code de 'getConds' ou essayer si vous avez un problème avec le filtrage si vous supprimez '' postData ': JSON.stringify (getConds())'? – Oleg

+0

Le filtrage ne fonctionne sur aucune colonne. getConds() crée un objet javascript simple qui a un tableau d'entiers et qui fonctionne bien (le serveur l'analyse et renvoie les résultats correspondants). Je vais essayer de supprimer cela mais je doute qu'il a quelque chose à voir avec ça. Quelque chose d'autre que j'ai remarqué est que si j'essaye d'effectuer un tri sur une colonne de façon préméditée (tri par défaut) cela ne fonctionne pas mais ça marche après (en cliquant sur cette colonne). En outre, si je tape quelque chose sur l'une des zones de texte du filtre, le tri par défaut est appliqué mais rien n'est filtré. Je suppose que je vais utiliser la source de jqgrid et déboguer – nvrs

+0

Hmm, j'ai essayé avec des données locales et il fonctionne maintenant comme il se doit. Il n'y a pas de différence dans les données réelles et les seuls changements dans la définition de la table ont à voir avec les données étant maintenant locales. Wierd ... – nvrs

Répondre

1

Votre original grid a un problème. Vous utilisez custom formatter pour la colonne « formule »:

formatter : function(value, options, rData){ 
    return value.substring(value.indexOf('=')+1); 
} 

afin que les données "f_18195()=110" sont affichées sous forme "100". La méthode fonctionne bien dans le cas de datatype: 'json'sansloadonce: true, mais fonctionne mal dans le cas de loadonce: true. Le problème est que les données enregistrées localement pour la colonne formula seront "f_18195()=110" et non "100". Ainsi, lors du filtrage de celui des données à taper « f » ou « f_18195() = 1 » au lieu de « 1 » pour filtrer les données:

enter image description here

Vous pouvez résoudre le problème si vous utilisez jsonmap comme fonction:

jsonmap: function (obj) { 
    var f = obj.formula; 
    return f.substring(f.indexOf('=')+1); 
} 

au lieu d'utilisation de l'utilisation de custom formatter pour la colonne « formule ». Dans le cas, la valeur « 100 » sera enregistré localement et le filtrage des données fonctionne comme prévu:

enter image description here

Voir la démo correspondante here.

+0

bonnes choses, merci. – nvrs

+0

@nvrs: Vous êtes les bienvenus! – Oleg