在上文"Flex AdvancedDataGrid表格过滤"中介绍了flat data和HierarchicalData的过滤处理,并且提到所谓表格过滤实质上就是表格的数据源过滤。本文继续假设表格的最终数据源就是Arraycollection,则表格过滤通用化处理,就是arraycollection的filterFunction通用化处理。
思路如下:
1)构造过滤条件列表;
2)过滤函数实现,根据过滤条件列表逐个进行验证,最终返回true或者false验证结果;
实现如下:
1)构造过滤条件列表
条件列表本身是一个array Collection,假设为conditions,其放置的对象为条件过滤对象,主要有4个元素:
column:要过滤的列名;
operator:操作符,有等于(=)、小于()、不等于(!=)、小于等于(=)、like(.)、not like(!.);
comparevalue:比较值
logical:逻辑值,and、or;
2)filterFunction实现
为了增加代码松耦合,将过滤处理的核心代码写成了一个类DataGridFilter,代码如下: publicclassDataGridFilter { privatestaticconst LOGICAL_AND:String = "AND"; privatestaticconst LOGICAL_OR:String = "OR"; // privatestaticconst OPERATOR_EQ:String = "="; privatestaticconst OPERATOR_LT:String = ""; privatestaticconst OPERATOR_LE:String = "="; privatestaticconst OPERATOR_NE:String = "!="; privatestaticconst OPERATOR_LIKE:String = "."; privatestaticconst OPERATOR_NOTLIKE:String = "!."; // publicfunctionDataGridFilter() { } publicfunction isMatched(item:Object, conditions:ArrayCollection):Boolean{ var ismatched:Boolean = true; for(var i:int=0; ivalue2; } } privatefunction isLE(value1:Object, value2:Object):Boolean{ if(value1==null){ returnfalse; }else{ return value1=value2; } } privatefunction isNE(value1:Object, value2:Object):Boolean{ returntrue; } privatefunction isLIKE(value1:Object, value2:Object):Boolean{ if(value1==null){ returnfalse; }else{ return value1.indexOf(value2)>-1; } } privatefunction isNOTLIKE(value1:Object, value2:Object):Boolean{ if(value1==null){ returnfalse; }else{ return value1.indexOf(value2)==-1; } } publicfunction isMatchedObject(item:Object, condition:Object):Boolean{ var value1:Object = item[condition["column"]]; var value2:Object = condition["comparevalue"]; switch(condition["operator"]){ case OPERATOR_EQ: return isEQ(value1,value2); break; case OPERATOR_LT: return isLT(value1,value2); break; case OPERATOR_GT: return isGT(value1,value2); break; case OPERATOR_LE: return isLE(value1,value2); break; case OPERATOR_GE: return isGE(value1,value2); break; case OPERATOR_NE: return isNE(value1,value2); break; case OPERATOR_LIKE: return isLIKE(value1,value2); break; case OPERATOR_NOTLIKE: return isNOTLIKE(value1,value2); break; } returntrue; } } 假设arraycollection.filterFunciton为filterFunc,则filterFunc实现如下:
privatefunctionfilterFunc(item:Object):Boolean{
var filter:DataGridFilter = new DataGridFilter();
// conditionList为过滤条件列表
return filter.isMatched(item,conditionList);
}
3)只要设置arraycollection的filterFunction为filterFunc,并且带上过滤条件列表即可实现表格的通用过滤处理,由于flat data和HierarchicalData数据源的构造方式不同,因此还需要做如下处理: if(conditionList.length>0){// conditionList过滤条件列表
if(_datagrid.dataProvider.source is HierarchicalData){
datagrid.dataProvider.source.source.filterFunction = filterFunc;
datagrid.dataProvider.source.source.refresh();
datagrid.dataProvider.source.refresh();
}else{
datagrid.dataProvider.filterFunction = filterFunc;
datagrid.dataProvider.refresh();
}
}else{
if(_datagrid.dataProvider.source is HierarchicalData){
datagrid.dataProvider.source.source.filterFunction = null;
datagrid.dataProvider.source.source.refresh();
datagrid.dataProvider.source.refresh();
}else{
datagrid.dataProvider.filterFunction = null;
datagrid.dataProvider.refresh();
}
}
发表评论
-
汇编写驱动(三)
2012-07-06 09:52 795我的上一篇文章, ... -
基于.net的网站信息采集系统的设计与实现
2012-07-06 09:46 5301 引言 随着WW ... -
JavaScript重构(五):利用原型和闭包,完成组件方法
2012-07-03 13:44 718终于要定义一个组 ... -
使用HTTPService读取远程XML文件为TREE赋值的例子
2012-07-02 12:55 644在FLEX4中 使用一个HTTPService 读取远程的 ... -
Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法
2012-07-02 12:55 720这段时间做个项目 ... -
重写组件遇到的问题
2012-07-02 12:55 545有时候重写组件的时候会遇到measure函数在调用 inv ... -
OpenScales入门教程:第二节 : 创建第一张地图
2012-07-02 12:55 648你需要把第一 ... -
DataGrid学习1
2012-07-02 12:54 616任务1:程序实现对dataGrid的某列进行排序操作。 ... -
深度剖析WinPcap之(十)――数据包的内核过滤(2)
2012-07-01 10:22 741在用flex杯bison开发语言处理程序时,用户先编写一个 ... -
Flex事件机制一
2012-07-01 10:21 549一:事件流机制 由于OOP编程将程序看成一个个对象、 ... -
Flex4自定义事件类型Event的相关应用
2012-07-01 10:21 575基于松耦合的概念 自定义事件类型将取到很重要的作用 当您 ... -
Flex是咋回事之三 谁用谁知道
2012-07-01 10:21 611一项技术,从概念 ... -
大型 flash 游戏开发经验浅谈(webGame)
2012-06-30 16:49 765大型 flash 游戏开发经验浅谈(webGame) 201 ... -
AS3.0类库整理
2012-06-30 16:49 473AS3.0类库整理 2011年10月26日 1、as3e ... -
[转载][转载]关于flash ActionScript 3.0 的一系列有用链
2012-06-30 16:49 380[转载][转载]关于flash ActionScript 3. ... -
FLEX和Actionscript开发FLASH游戏9-2(1)
2012-06-30 16:49 232FLEX和Actionscript开发FLASH游戏9-2(1 ...
相关推荐
Flex高级表格标题分组与列的锁定,及样式
flex8表格控件,可以方便的实现表格的数据处理,并且里面附带了全面的例子,解决很多程序员的表格问题
很久之前 我曾在博客分享过我开发的电子表格组建 现在开源下 2 3年前写的 电脑里就有这个 可能不是最终的版本 应该会有很多bug 见谅
在FLEX4中开发带有过滤功能的DATAGRID组件
这个是针对与flex 的表格合并,包括表头合并,有好几种呈现方式,上面只是一种。
一个flex写的实现数据表格datagrid的实例。
flex电子表格 flex电子表格 flex电子表格
该实例展示了combobox通过输入进行过滤的数据源的方法,实现环境为flex4,测试通过,希望可以帮到你!
包括最新的高级表格研究,全部基于Flex3
parsley loc框架 flash flex 通用
java flex,flex通用分页控件
最近用到,flex datagrid最下面加上了合计功能,源代码,下载可导入直接运行
Flex FooterSpark DataGrid 高效Flex表格开发技术实例
Flex 表格的单元格合并的简单示例,易懂简单
Flex加载GIF动画处理类 ,Flex加载GIF动画处理类 ,Flex加载GIF动画处理类
FLEX双击左右移动表格中的数据,此小程序希望对大家会有些帮助。
直接就可用,如不明白可以去博客中查找相关内容。
FLEX4 修改表格的单元格背景色的工程文件
flex支持过滤的input,并显示出来,比如你在input 中输入个a它会把所有带a的显示出来,就类似google的模糊查询
NULL 博文链接:https://leopard0825.iteye.com/blog/585623