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

时间:2011-09-08 14:51:15

标签: sorting flex datagrid adobe

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

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

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

2 个答案:

答案 0 :(得分:10)

只需使用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", "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>

<强> 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;

}
}

答案 1 :(得分:0)

或者,如果您不希望datagrid实际执行排序,例如,当您处理具有已排序项的分页系统时。扩展spark数据网格并添加以下方法:

public function PlaceSortIndicator(columnIndex:uint, descending:Boolean):void
{
    if(columnIndex >= 0 && columns != null && columns.length > columnIndex)
    {
        var column:GridColumn = columns.getItemAt(columnIndex) as GridColumn;
        if(column != null)
        {
            column.sortDescending = descending;
            if (columnHeaderGroup)
                columnHeaderGroup.visibleSortIndicatorIndices = new <int>[columnIndex];
        }
    }
}