dataGrid过滤器查询和渲染器的使用

来源:互联网 发布:java 加密压缩文件 编辑:程序博客网 时间:2024/05/21 06:23

以前没用过滤器,查询比较麻烦,需要遍历整个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,并清空绑定的ArrayCollectionbackup();//遍历备份的数据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>
这样就很简单了