以前没用过滤器,查询比较麻烦,需要遍历整个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>
这样就很简单了