在应用程序的creationComplete(Flex 4.5)上设置Spark DataGrid列的默认排序

bud*_*450 6 apache-flex sorting adobe datagrid

我有一个带有几列的spark DataGrid组件,我希望我的应用程序默认在DataGrid的第一列上降序.我想使用单击顶部标题一次时发生的内置默认排序.我没有必要对我正在使用的ArrayCollection进行排序或更改比较器的内容.

我还想要任何用户生成的排序,例如单击不同列的标题来覆盖默认排序.

有没有人对如何解决这个问题有任何想法?谢谢.

Max*_*kiy 10

只需使用sortByColumn方法:

var columnIndexes:Vector.<int> = Vector.<int>([ 0 ]);
dataGrid.sortByColumns(columnIndexes, true);
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子:

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", "Burbank", 39),
            new Product("Flash Drive", "Burbank", 59),
            new Product("iPod", "Burbank", 49),
            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>
Run Code Online (Sandbox Code Playgroud)

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;

}
}
Run Code Online (Sandbox Code Playgroud)