以前没用过滤器,查询比较麻烦,需要遍历整个arrayCollecton
1.备份原来的数据
private var myCt:ArrayCollection = new ArrayCollection(); private var flag:Boolean = true; private function backup():void { if(flag) { myCt.removeAll(); for(var i:int=0;i<myArrayCollection.length;i++) { var person:Object = myArrayCollection.getItemAt(i); myCt.addItem(person); } } flag = false; }
2.从备份中取出所有
private function getAll():void { myArrayCollection.removeAll(); for(var j:int=0;j<myCt.length;j++) { var temp:Object = myCt.getItemAt(j); myArrayCollection.addItem(temp); } }
以上两个方法都是为查询做准备的
3.查询
private function selectInfo(key:String):void { //查询之前先备份绑定的ArrayCollection,并清空绑定的ArrayCollection backup(); //遍历备份的数据 if(key.length != 0) { myArrayCollection.removeAll(); for(var i:int=0;i<myCt.length;i++) { var person:Object = myCt.getItemAt(i); if((person.num).indexOf(key) != -1 || (person.name).indexOf(key) != -1 || (person.company).indexOf(key) != -1) { myArrayCollection.addItem(person); } } //如果查询结果为空 if(myArrayCollection.length == 0) { Alert.show("没有查询到相关数据,请重新输入关键字查询!"); } } else { //输入为空,返回所有数据 getAll(); } myData.invalidateList(); }
上面是以对编号,姓名和公司的模糊查询
下面用filter来做:
<?xml version="1.0" encoding="utf-8"?> <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" creationComplete="init()"> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.controls.CheckBox; import mx.core.FlexGlobals; import mx.events.FlexEvent; [Bindable] public var arr:ArrayCollection = new ArrayCollection([ {name:'jim',num:'001',selected:true}, {name:'tom',num:'002'}, {name:'lucy',num:'003'}]); private function init():void { dg.dataProvider = arr; } private function textinput1_enterHandler(event:FlexEvent):void { arr.filterFunction = dgFilter; arr.refresh(); } private function dgFilter(item:Object):Boolean{ if(item["name"].toString().indexOf(txt.text)>=0 ){ return true; }else if(item["num"].toString().indexOf(txt.text.toString())>=0 ){ return true; }else{ return false; } } public function a():void{ Alert.show("hello"); } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <mx:DataGrid id="dg" x="166" y="57"> <mx:columns> <mx:DataGridColumn dataField="selected"> <mx:itemRenderer> <fx:Component> <mx:Button label="click me" click="outerDocument.a()"/> </fx:Component> </mx:itemRenderer> </mx:DataGridColumn> <mx:DataGridColumn headerText="姓名" dataField="name"/> <mx:DataGridColumn headerText="编号" dataField="num"/> </mx:columns> </mx:DataGrid> <s:TextInput id="txt" x="166" y="27" enter="textinput1_enterHandler(event)"/> </s:Application>
这样就很简单了