2010-07-26 6 views
0

J'ai essayé d'utiliser filterFunction pas obtenir aucun résultat, consultez cet exemple:Comment rechercher une chaîne dans un DataProvider flexible DataGrid 4?

[Bindable] 
public var SearchLoadlistOneDP:ArrayCollection; 


public function SearchList():void { 


SearchLoadlistOneDP.filterFunction = filter; 
SearchLoadlistOneDP.refresh() 


} 


public function filter(item:Object):Boolean 
{ 
var beginsWithString:String = SearchLoadlistOneInput.text; 



return String(item["email"]).indexOf(beginsWithString) == 0; 
} 

et moi le DataGrid comme ceci:

<mx:DataGrid x="10" dataProvider="{SearchLoadlistOneDP}" y="49" width="891" height="408" id="listamail" creationComplete="LoadlistOne(0)"> 


    <mx:columns> 
     <mx:DataGridColumn headerText="id" dataField="id" width="80"/> 
     <mx:DataGridColumn headerText="E-mail" dataField="email"/> 
     <mx:DataGridColumn headerText="Nome" dataField="nome"/> 
    </mx:columns> 


    </mx:DataGrid> 

et saisie de texte comme ceci:

<s:TextInput x="62.6" y="9.75" width="408" id="SearchLoadlistOneInput" keyUp="SearchList()" /> 

Mais malheureusement, je ne peux pas obtenir de résultats, et la grille de données contient déjà des données de la base de données.

quelqu'un peut-elle aider ?, Merci à vous tous maintenant

Répondre

0

Flex SDK 4.0.0, Cela fonctionne pour moi:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="_init();"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      [Bindable] 
      public var SearchLoadlistOneDP:ArrayCollection; 

      private function _init() :void 
      { 
       SearchLoadlistOneDP = new ArrayCollection(); 
       SearchLoadlistOneDP.addItem({id: 1, email: '[email protected]', name:'Bill'}); 
       SearchLoadlistOneDP.addItem({id: 2, email: '[email protected]', name:'Todd'}); 
       SearchLoadlistOneDP.addItem({id: 3, email: '[email protected]', name:'Beth'}); 
       SearchLoadlistOneDP.addItem({id: 4, email: '[email protected]', name:'Tiffany'}); 
      } 

      public function SearchList():void { 
       SearchLoadlistOneDP.filterFunction = filter; 
       SearchLoadlistOneDP.refresh() 
      } 


      public function filter(item:Object):Boolean 
      { 
       var name:String = String(item["email"]); 
       var beginsWithString:String = SearchLoadlistOneInput.text; 

       return name.indexOf(beginsWithString) == 0; 
      } 
     ]]> 
    </fx:Script> 

    <mx:DataGrid x="10" dataProvider="{SearchLoadlistOneDP}" y="49" width="891" height="408" id="listamail"> 


     <mx:columns> 
      <mx:DataGridColumn headerText="id" dataField="id" width="80"/> 
      <mx:DataGridColumn headerText="E-mail" dataField="email"/> 
      <mx:DataGridColumn headerText="Name" dataField="name"/> 
     </mx:columns> 


    </mx:DataGrid> 


    <s:TextInput x="62.6" y="9.75" width="408" id="SearchLoadlistOneInput" keyUp="SearchList()" /> 

</s:Application> 
1

Voici ce que votre fonction de filtre devrait ressembler. J'utilise cette méthode depuis un certain temps et je n'ai eu aucun problème avec ça. Cela fonctionne avec Flex 3 & 4.

private function filter(item:Object):Boolean{ 

    //this is going to return true if we don't have anything to search by, which will return 
    //all items the the datagrid 
    if(SearchLoadlistOneInput.text == ""){ 
    return true; 
    } 

    //now search the string and see if we have a match// 
    if(item.email.toLowerCase().search(SearchLoadlistOneInput.text.toLowerCase()) != -1){ 
     return true; 
    } 

    return false; 
} 
Questions connexes