Как искать строку в пределах гибкой сетки данных dataProvider 4? - PullRequest
0 голосов
/ 26 июля 2010

Я попытался с помощью filterFunction не получить никаких результатов, посмотрите этот пример:

[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;
}

И я использовал сетку данных так:

<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>

И ввод текста следующим образом:

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

Но, к сожалению, я не могу получить никаких результатов, и в сетке данных уже есть данные из базы данных, уже есть данные, перечисленные в ней.

Может кто-нибудь помочь ?, Спасибо всем сейчас

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Вот как должна выглядеть ваша функция фильтра. Я использовал этот метод некоторое время и не было никаких проблем с ним. Это работает с 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;
}
0 голосов
/ 26 июля 2010

Flex SDK 4.0.0, у меня это работает:

<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: 'fake@null.com', name:'Bill'});
                SearchLoadlistOneDP.addItem({id: 2, email: 'test@null.com', name:'Todd'});
                SearchLoadlistOneDP.addItem({id: 3, email: 'null@null.com', name:'Beth'});
                SearchLoadlistOneDP.addItem({id: 4, email: 'void@null.com', 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>
...