6.4.过滤DataGrid数据项
本章用到的 Flex3中文教程--homesforsale.xml文件
6.4.1. 问题
我想在客户端对显示的数据进行过滤
6.4.2. 解决办法
给ArrayCollection 的filterFunction 属性赋值自定义函数引用以执行过滤匹配。
6.4.3. 讨论
为了掩饰客户端过滤数据,下面的例子添加一个city 过滤功能。UI 新增一个TextInput 文本输入框供用户输入city 名称并过滤掉DataGrid 中匹配的相应数据。当用户在cityFilter 文本框控件中输入数据时,文本框会触发change 事件,通过applyFilter 方法进行处理。applyFilter方法赋值一个函数引用给homesForSale ArrayCollection 实例的filterFunction 属性,并调用ArrayCollection 的refresh 方法。filterCities 方法对dataProvider 的city 属性值和文本框输入值进行小写字符串匹配测试:
6.4.1. 问题
我想在客户端对显示的数据进行过滤
6.4.2. 解决办法
给ArrayCollection 的filterFunction 属性赋值自定义函数引用以执行过滤匹配。
6.4.3. 讨论
为了掩饰客户端过滤数据,下面的例子添加一个city 过滤功能。UI 新增一个TextInput 文本输入框供用户输入city 名称并过滤掉DataGrid 中匹配的相应数据。当用户在cityFilter 文本框控件中输入数据时,文本框会触发change 事件,通过applyFilter 方法进行处理。applyFilter方法赋值一个函数引用给homesForSale ArrayCollection 实例的filterFunction 属性,并调用ArrayCollection 的refresh 方法。filterCities 方法对dataProvider 的city 属性值和文本框输入值进行小写字符串匹配测试:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" creationComplete="initApp()">
<mx:HTTPService id="srv" url="assets/homesforsale.xml"
resultFormat="object" result="onResult(event)"/>
<mx:Form>
<mx:FormItem label="City">
<mx:TextInput id="cityFilter" change="applyFilter()"/>
</mx:FormItem>
</mx:Form>
<mx:AdvancedDataGrid id="grid" width="100%"
height="100%" sortExpertMode="true"
dataProvider="{homesForSale}">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="Total No."
dataField="total"/>
<mx:AdvancedDataGridColumn headerText="City"
dataField="city"/>
<mx:AdvancedDataGridColumn headerText="State"
dataField="state"/>
<mx:AdvancedDataGridColumn headerText="Price Ranges
[<350K] [350K -600K] [>600K]" dataField="range"
itemRenderer="RangeRenderer" sortCompareFunction="sortRanges"/>
</mx:columns>
</mx:AdvancedDataGrid>
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var homesForSale:ArrayCollection;
private function initApp():void {
this.srv.send();
}
private function onResult(evt:ResultEvent):void {
this.homesForSale = evt.result.data.region;
}
private function sortRanges(obj1:Object,
obj2:Object):int{
var value1:Number = obj1.range.range1;
var value2:Number = obj2.range.range1;
if(value1 < value2) {
return -1;
}
else if(value1 > value2){
return 1;
}
else {
return 0;
}
}
private function applyFilter():void {
if(this.homesForSale.filterFunction == null) {
this.homesForSale.filterFunction =
this.filterCities;
}
this.homesForSale.refresh();
}
private function filterCities(item:Object):Boolean {
var match:Boolean = true;
if(cityFilter.text != "") {
var city:String = item["city"];
var filter:String = this.cityFilter.text;
if(!city ||
city.toLowerCase().indexOf(filter.toLowerCase()) < 0) {
match = false;
}
}
return match;
}
]]>
</mx:Script>
</mx:Application>
layout="vertical" creationComplete="initApp()">
<mx:HTTPService id="srv" url="assets/homesforsale.xml"
resultFormat="object" result="onResult(event)"/>
<mx:Form>
<mx:FormItem label="City">
<mx:TextInput id="cityFilter" change="applyFilter()"/>
</mx:FormItem>
</mx:Form>
<mx:AdvancedDataGrid id="grid" width="100%"
height="100%" sortExpertMode="true"
dataProvider="{homesForSale}">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="Total No."
dataField="total"/>
<mx:AdvancedDataGridColumn headerText="City"
dataField="city"/>
<mx:AdvancedDataGridColumn headerText="State"
dataField="state"/>
<mx:AdvancedDataGridColumn headerText="Price Ranges
[<350K] [350K -600K] [>600K]" dataField="range"
itemRenderer="RangeRenderer" sortCompareFunction="sortRanges"/>
</mx:columns>
</mx:AdvancedDataGrid>
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var homesForSale:ArrayCollection;
private function initApp():void {
this.srv.send();
}
private function onResult(evt:ResultEvent):void {
this.homesForSale = evt.result.data.region;
}
private function sortRanges(obj1:Object,
obj2:Object):int{
var value1:Number = obj1.range.range1;
var value2:Number = obj2.range.range1;
if(value1 < value2) {
return -1;
}
else if(value1 > value2){
return 1;
}
else {
return 0;
}
}
private function applyFilter():void {
if(this.homesForSale.filterFunction == null) {
this.homesForSale.filterFunction =
this.filterCities;
}
this.homesForSale.refresh();
}
private function filterCities(item:Object):Boolean {
var match:Boolean = true;
if(cityFilter.text != "") {
var city:String = item["city"];
var filter:String = this.cityFilter.text;
if(!city ||
city.toLowerCase().indexOf(filter.toLowerCase()) < 0) {
match = false;
}
}
return match;
}
]]>
</mx:Script>
</mx:Application>
加支付宝好友偷能量挖...