我有一个带有几列的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; } }