Настройка сортировки по умолчанию для столбца Spark DataGrid при создании приложения в CompCplete - PullRequest
6 голосов
/ 08 сентября 2011

У меня есть компонент DataGrid с несколькими столбцами, и я хочу, чтобы в первом столбце DataGrid приложение по умолчанию использовалось в порядке убывания.Я хотел бы использовать встроенную сортировку по умолчанию, которая происходит при нажатии верхнего заголовка один раз.У меня нет необходимости сортировать коллекцию ArrayCollection, с которой я работаю, или менять компараторы.

Я также хочу любую пользовательскую сортировку, например щелчок по заголовку другого столбца, чтобы переопределить сортировку по умолчанию.*

У кого-нибудь есть идеи, как это сделать?Спасибо.

Ответы [ 2 ]

10 голосов
/ 08 сентября 2011

Просто используйте 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;

}
}
0 голосов
/ 04 апреля 2015

В качестве альтернативы, если вы не хотите, чтобы таблица данных действительно выполняла сортировку, например, когда вы работаете с системой подкачки с уже отсортированными элементами. Расширьте сетку данных искры и добавьте следующий метод:

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];
        }
    }
}
...