DataGrid经常用来充当表现数据源的角色,当我们面对很多一个从数据库里面查询出来的庞大结果集,要迅速获得我们所需的信息时,我们可以使用DataGrid进行数据过滤!
当我们使用DataGrid进行数据过滤的时候,真正过滤的是数据源,是对数据源进行过滤和操作,这点要先搞明白。我们举一个例子,下面的代码是组件代码,其中包括了label,inputText,combox,button。inputText用于接收用户查询关键字,combox进行字段选择,button用于触发查询动作。
<mx:HBox width="100%">
<mx:Label text="输入关键字,在右边下拉框选择字段查询:"/>
<mx:TextInput id="key"/>
<mx:ComboBox id="cobox" dataProvider="{comboxDS}"/>
<mx:Button label="关键字查询" click="this.filterDataGrid();"/>
</mx:HBox>
在脚本的代码里面进行初始化
private function init():void{
this.search();
appearStandard=new AppearStandardObject();
this.initUI();
comboxDS=new ArrayCollection();
// comboxDS.addItem({label:'查询全部',data:'any'});
comboxDS.addItem({label:'外观规范',data:'appearCode'});
comboxDS.addItem({label:'抽样计划',data:'samplePlan'});
}
search函数用于从数据库里面获取全部数据,this.initUI()初始化用户界面组件,下面实例化comboxDS并且放进去我们需要进行过滤比较的数据库字段。
//过滤数据的函数
private function filterDataGrid():void{
list.filterFunction=filterFunc;//list.filterFunction=filterFunc(list)是错的,不要加参数;
//数据源自己刷新
list.refresh();
}
点击触发按钮,执行上面的函数,对数据过滤。list为绑定的数据源,类型为ArrayCollection,查询完数据库后对其赋值。其中的filterFunction用于过滤数据的函数,list.refresh()表示数据源自动刷新,顺便说一下,Array这类数组类型的都有这样的函数,查查手册就知道了。接下来是对filterFunc的实现:
private function filterFunc(item:Object):Boolean{
//combox里面选择的需要过滤的字段
var col:String=this.cobox.selectedItem.data as String;
//用户输入的需要查找的关键字;
var keyword:String=this.key.text;
if(keyword!=""){
var value:String="";
if(col!="any"){
//定义一个字符串储存行对象的相应字段
value=item[col];
//判断所取出来的数据是否有关键字
if(value.indexOf(keyword)>=0){
return true;
}
}else{
//其实与上面差不多,只是上面指定了具体字段,下面是没有具体字段搞一个遍历而已
for(var o:String in item){
value=item[o];
if(value.indexOf(keyword)>=0){
return true;
}
}
}
}else{
return true;
}
return false;
}
return true的时候表示该行有数据符合过滤条件。
在这里说明一下,我不会贴出全部源码,我也不知道怎么上传,大家如果有兴趣的话自己动手做做,编程的东西缺少实践一切都是废话。
总结一下,从数据库里面查询数据庞大,快速定位信息需要用户进行条件查询,根据用户输入的关键字,对list进行一个过滤,list数据源必须刷新,而且必须有一个过滤函数。