2012-08-31 3 views
2

Est-il possible de créer une requête dgrid qui recherchera une chaîne regex sur plusieurs colonnes? Habituellement, la syntaxe spécifie {column1: "foo", column2: "foo"} mais cela recherchera les lignes où column1 et column2 sont "foo". Mais je veux utiliser la même chaîne de recherche contre les deux colonnes ... est-ce possible et comment le ferais-je? J'ai besoin de quelque chose comme {column1 || colonne2: "foo"}.Comment interroger un dgrid sur plusieurs colonnes

Répondre

5

Vous pouvez écrire votre propre fonction comme je l'ai mentionné dans ma réponse à votre question précédente Is it possible to filter data in a dgrid like you can in a datagrid?

Ou vous pouvez utiliser Resource Query Language (RQL).

dgrid interroge son magasin, par ex. dojo/store/Memory, qui utilise dojo/store/util/SimpleQueryEngine par défaut. Tout ce que vous devez faire est de nourrir la propriété store.queryEngine avec QueryEngine de votre choix. Dans le cas de RQL, il ressemble à ceci (source):

require(["dojo/store/Memory", "rql/js-array", "dgrid/OnDemandGrid"], function(Memory, rql, Grid) { 

    var store = new Memory({ data: { /* some data here */}}); 
    store.queryEngine = rql.query; 

    var grid = new Grid({ 
     store: store, 
     columns: { /* some columns here */} 
    }, "grid") 

}); 

Maintenant, vous pouvez interroger dgrid avec la syntaxe RQL. La question pour répondre à votre question: (column1=foo|column2=foo).

S'il vous plaît jeter un oeil à mon jsFiddle (http://jsfiddle.net/phusick/VjJBT). Ne hésitez pas à la fourche et expérimenter soit avec dgrid lui-même (il y a des requêtes prédéfinies) ou avec des tests unitaires DOH (console JS ouverte pour voir une sortie):

enter image description here

+0

Merci pour vos suggestions et votre aide! Je constate que mon dgrid affiche un sous-ensemble du jeu d'enregistrements total de 122 recs. C'est avant que tout soit tapé dans l'entrée filterString. Dans mon cas, je reste avec le moteur de recherche simple par défaut plutôt qu'avec le moteur rql. Initialement, au chargement de la page, la poignée de la barre de défilement est minuscule indicative d'environ 122 rec set. Mais dès que je commence à le faire défiler, il se développe en longueur et le jeu d'enregistrements change et finit par être environ 45 recs. Je n'ai pas encore de requête appliquée, donc je ne suis pas sûr de ce qui expliquerait cela. – teaman

+0

Je suppose que c'est OnDemandGrid qui fait une charge paresseuse, mais quelle requête est-il appliquer et pourquoi? À part ce problème, mon mécanisme de filtre/requête fonctionne bien sur plusieurs colonnes. J'ai fondamentalement appliqué ce que vous aviez dans cet autre post (auquel vous avez répondu) en utilisant le ~ (item.Name + "") .toLowerCase(). IndexOf (filterString.toLowerCase()) pour chaque nom de colonne en utilisant "|| " entre chaque. – teaman

Questions connexes