我有一个带有几列的spark DataGrid组件,我希望我的应用程序默认在DataGrid的第一列上降序.我想使用单击顶部标题一次时发生的内置默认排序.我没有必要对我正在使用的ArrayCollection进行排序或更改比较器的内容.
我还想要任何用户生成的排序,例如单击不同列的标题来覆盖默认排序.
有没有人对如何解决这个问题有任何想法?谢谢.
解决方法
只需使用sortByColumn方法:
var columnIndexes:Vector.<int> = Vector.<int>([ 0 ]); dataGrid.sortByColumns(columnIndexes,true);
这是一个完整的例子:
DataGridSort.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="sortDataGrid();">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.collections.ArrayList;
[Bindable]
private var dataProvider:ArrayCollection = new ArrayCollection(
[
new Product("iPad","Detroit",599),new Product("iPod","Burbank",49),new Product("iPod Nano",39),new Product("Flash Drive",59),new Product("galaxy Tab","Coldbridge",499),new Product("HTC Hero","Abidjan",700)
]);
private function sortDataGrid():void
{
// you can also use Vector.<int>([ 0,1 ]); to sort by first 2 columns
var columnIndexes:Vector.<int> = Vector.<int>([ 0 ]);
// set 2nd argument to true to show sorting triangle
dataGrid.sortByColumns(columnIndexes,true);
}
]]>
</fx:Script>
<s:DataGrid id="dataGrid" horizontalCenter="0" verticalCenter="0" width="200"
dataProvider="{dataProvider}">
<s:columns>
<s:ArrayCollection>
<s:GridColumn datafield="name"/>
<s:GridColumn datafield="location"/>
<s:GridColumn datafield="price"/>
</s:ArrayCollection>
</s:columns>
</s:DataGrid>
</s:Application>
Product.as
package
{
import flash.events.Eventdispatcher;
public class Product extends Eventdispatcher
{
public function Product(name:String = null,location:String = null,price:Number = 0)
{
super();
this.name = name;
this.location = location;
this.price = price;
}
public var name:String;
public var location:String;
public var price:Number;
}
}