其实,对DatatGrid进行筛选,本质是对DataGrid的dataProvider进行筛选。筛选功能通过ICollectionView接口的filterFunction属性实现。

通常,DataGrid的dataProvider会是一个ArrayCollection,而ArrayCollection实现了ICollectionView接口,因此可以直接使用filterFunction属性。

因此,要实现对一个ArrayCollection的筛选,只需要把一个自定义函数名指定给这个要被筛选的ArrayCollection的filterFunction属性,然后刷新ArrayCollection即可,例如:

1
2
cityAC.filterFunction = filterFunc;
cityAC.refresh();

在这里例子里面,我使用的数据是武汉市和宜昌市的下级行政区。可以使用三种条件进行筛选:

  1. 显示武汉市、宜昌市、或者全部的行政区
  2. 显示区、县或者县级市
  3. 根据名称或者名称的拼音进行筛选

所以,这个自定义函数就是筛选功能实现的核心:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private function filterFunc(item:Object):Boolean
{
var _csv:int = citySelectCOB.selectedItem.data; //csv = citySelectValue
var _lsv:String = levelSelectCOB.selectedLabel; //lsv = levelSelectValue
var _sv:String = searchTI.text; //sv - seachValue
var _lre:RegExp = new RegExp(_lsv, "");
var _sre:RegExp = new RegExp(_sv, "gi");
var _cb:Boolean = (_csv == -1) ? true : (item.parent == _csv);
var _lb:Boolean = (_lsv == "全部") ? true : _lre.test(item.label);
var _sb:Boolean = (_sv == "") ? true : (_sre.test(item.label) || _sre.test(item.data));
trace("_sv:", _sv)
trace("_sre.test(item.label):", _sre.test(item.data));
trace("item.label:", item.data);
return _cb && _lb && _sb;
}

filterFunc这个函数的参数就是ArrayCollection的一项,通过在判断相应项目的值,返回true的项目会显示,返回false的项目则不会显示在DataGrid中。由于是多种条件,因此在函数中进行了三重判断,最后对三重判断的结果进行
与 操作或者最终判断值。

范例效果:

您的浏览器不支持JavaScript,或者您禁用了JavaScript。

请启用浏览器的JavaScript支持。

如果您确认启用了JavaScript,请使用下面的链接升级Flash Player到最新版本:

安装最新的Flash Player插件

留言

2007-08-07
次访问