2008-10-06 3 views
0

J'ai un filtre dans une zone de liste déroulante avec un nombre d'entrées. Au lieu de filtrer la grille de données avec une correspondance exacte, je voudrais prendre la valeur sélectionnée et afficher uniquement les enregistrements où la valeur sélectionnée est contenue dans le champ de données. Par exemple: l'utilisateur sélectionne une valeur de "Nouveau" et la grille de données affiche des enregistrements où le contenu de l'enregistrement peut être "Nouvel Utilisateur", "Nouvelle Personne", "Celui-ci est Nouveau", etc Je pense que j'ai besoin pour utiliser RegExp, mais je ne peux pas savoir comment le faire fonctionner. Merci à l'avance, S ...Flex: Filtrer une grille de données à l'aide d'une valeur de zone de liste déroulante contenue dans un champ de données

Répondre

4

Quelque chose comme cela devrait fonctionner:

public function filter(item:Object):Boolean{ 
     var result:Boolean=false; 
     if (item.name.toUpperCase().indexOf(cbo.selectedLabel.toUpperCase()) >= 0) 
      result=true; 
     return result; 
} 

Cette fonction de filtre rechercher l'attribut nom (ou tout ce que vous souhaitez filtrer) de l'objet passé avec l'étiquette actuellement sélectionnée de la liste déroulante et si elle trouve cette valeur, elle retournera vrai. Donc, s'il trouve le mot "New" n'importe où dans la chaîne, il apparaîtra dans la grille de données. IE: "Nouvelle personne", "Nouvel utilisateur" apparaîtra une fois filtré.

J'espère que c'est ce que vous cherchez.

3

Vous pouvez modifier ceci pour produire une fonctionnalité de filtrage déroulant. actuellement le filtrage de zone de texte fonctionne. donc je le poste ici.

Déclarons le 2 variables de chaîne tempString et tempString_Name puis ...

Utilisez les 2 fonctions suivantes

private function filterByTerritory(item:Object):Boolean{ 
     tempString = item.name; 
     tempString_Name = item.territory; 
     if((tempString.indexOf(sampleFilter.text,0) != -1) && 
         (tempString_Name.indexOf(terrFilterTxt.text,0) != -1)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
    private function doFilter():void{ 
     if((sampleFilter.text.length == 0) && 
       (terrFilterTxt.text.length == 0)) { 
      myData.filterFunction == null; 
     } 
     else{ 
      myData.filterFunction = filterByTerritory; 
     } 
     myData.refresh(); 
    } 

recevoir des données thru ces 2 zones de texte

<mx:TextInput id="sampleFilter" change="doFilter()"/> 
    <mx:TextInput id="terrFilterTxt" change="doFilter()"/> 

bref: appelez doFilte r sur un événement sur lequel vous voulez que le filtrage se produise.

Bientôt je posterai le filtrage d'une grille de données basée sur la zone de liste déroulante. Jusque-là, au revoir. Je deviendrai un membre bientôt :)

+0

c'est friggin IMPRESSIONNANT et est bien meilleur que tout ce que j'ai vu approcher cela. Bravo pour cela, vous m'avez sauvé un tel tracas, je me sens comme si je vous dois dîner. – D3vtr0n

+0

cela a fonctionné très bien pour moi aussi, merci! –

Questions connexes