读书人

Flex DataGrid 默许排序

发布时间: 2012-10-07 17:28:51 作者: rapoo

Flex DataGrid 默认排序
对于DataGrid的排序今天研究了一个下午,找了不少资料,终于找到了解决方案。发现DataGridColumn的属性sortCompareFunction和sortDescending是点击列头后的排序方式,而要确定默认情况下的排序方式是无效的。可以这样实现:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.SortField;
import mx.collections.Sort;
import mx.utils.ObjectUtil;
import mx.collections.ArrayCollection;
[Bindable]
private var adg:ArrayCollection = new ArrayCollection([{name:"张三华",age:15,sex:"男"},
{name:"李四国",age:45,sex:"男"},
{name:"王七花",age:24,sex:"女"},
{name:"赵华柳",age:17,sex:"女"},
{name:"田三华",age:33,sex:"男"},]);


private function init():void{
adg.sort = new Sort();
adg.sort.fields = [new SortField("age",false,true)];
adg.refresh();
dg.dataProvider = adg;
}

private function sortRanges(obj1:Object,obj2:Object):int{
var value1:Number = obj1.age;
var value2:Number = obj2.age;
if(value1 > value2 ){
return 1;
}else if(value1 < value2 ){
return -1;
}else{
return 0;
}
}
private function dataFilter():void{
if(adg.filterFunction == null){
adg.filterFunction = dataFilter2;
}
adg.refresh();
}
private function dataFilter2(item:Object):Boolean{
var bool:Boolean = true;
var it:String = item["name"];
var filter:String = ti.text;
if(!it || it.toLowerCase().indexOf(filter.toLowerCase()) < 0){
bool = false;
}
return bool;
}
private function sortCompare(obj1:Object,obj2:Object):int{
return ObjectUtil.numericCompare(obj1.age,obj2.age);
}
]]>
</mx:Script>
<mx:DataGrid id="dg" x="89" y="46" width="552" height="160">
<mx:columns>
<mx:DataGridColumn headerText="name" dataField="name"/>
<mx:DataGridColumn headerText="age" dataField="age"/>
<mx:DataGridColumn headerText="sex" dataField="sex" />
</mx:columns>
</mx:DataGrid>
<mx:Form>
<mx:FormItem>
<mx:TextInput id="ti" change="dataFilter()"/>
</mx:FormItem>
</mx:Form>
</mx:Application>
重点是黑体字部分,SortField第一个参数是排序的字段,第二个参数用来确定是否区分大小写,第三个参数表示是否按降序排列。

读书人网 >flex

热点推荐