Как отсортировать ArrayCollection в Flex - PullRequest
6 голосов
/ 24 февраля 2012

Я хочу отсортировать Arraycollection по fieldName по возрастанию.Вот мой код, и я хочу знать, правильно ли это.Есть ли у вас какие-либо предложения?

public static function arrayCollectionSort(ar:ArrayCollection, fieldName:String, isNumeric:Boolean):void 
    {var dataSortField:SortField = new SortField();
        dataSortField.name = fieldName;
        dataSortField.numeric = isNumeric;
        var numericDataSort:Sort = new Sort();
        numericDataSort.fields = [dataSortField];
        arrCol.sort = numericDataSort;
        arrCol.refresh();}

Ответы [ 3 ]

16 голосов
/ 24 февраля 2012

Код у вас правильный, кроме типа. arrCol должно быть ar. Код выглядит почти так же, как код в блоге Примеры гибких дисков , что тоже правильно.

Просто изменить это изменить arrCol на ar, как показано ниже:

public static function arrayCollectionSort(ar:ArrayCollection, fieldName:String, isNumeric:Boolean):void 
{
    var dataSortField:SortField = new SortField();
    dataSortField.name = fieldName;
    dataSortField.numeric = isNumeric;
    var numericDataSort:Sort = new Sort();
    numericDataSort.fields = [dataSortField];
    ar.sort = numericDataSort;
    ar.refresh();
}

Не уверен с числовым, но в остальном все правильно.

3 голосов
/ 01 марта 2012

Ваш код в порядке, но вот пара примеров, где числовая и алфавитная сортировка применяется к нажатию кнопки.

Алфавитная сортировка является хорошим примером сортировки по 2 атрибутам.В этом случае первичная сортировка выполняется по «имени», вторичная сортировка - по «фамилии».

Числовая сортировка достаточно гибкая, если вы предоставите логическое значение true для числового значения.Параметр поля сортировки, сортировка приведёт атрибут к числу и отсортирует по номеру.Если вы указываете логическое значение false, используется встроенная функция сравнения строк.Каждый из элементов данных приводится к функции String () перед сравнением.При значении по умолчанию, равном null, первый элемент данных подвергается внутреннему анализу, чтобы определить, является ли он числом или строкой, и сортировка продолжается на основе этого самоанализа.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="955" minHeight="600">

    <mx:Button label="Sort by first then last name" click="sortItemsByName()"/>
    <mx:Button label="Sort by number" click="sortItemsByNumber()"/>

    <mx:DataGrid dataProvider="{items}"
                 width="300"
                 height="300">
        <mx:columns>
            <mx:DataGridColumn dataField="number"/>
            <mx:DataGridColumn dataField="firstname"/>
            <mx:DataGridColumn dataField="lastname"/>
        </mx:columns>
    </mx:DataGrid>

    <mx:ArrayCollection id="items">
        <mx:Object number="3" firstname="John" lastname="Brown"/>
        <mx:Object number="1" firstname="Kate" lastname="Brown"/>
        <mx:Object number="4" firstname="Jeremy" lastname="Ryan"/>
        <mx:Object number="5" firstname="Joe" lastname="Wilson"/>
        <mx:Object number="2" firstname="Greg" lastname="Walling"/>
    </mx:ArrayCollection>

    <mx:Script>
        <![CDATA[           
            import mx.collections.ArrayCollection;
            import mx.collections.Sort;
            import mx.collections.SortField;

            /**
             * Sort the arraycollection by the firstname and then the last name
             * */
            private function sortItemsByName():void{
                var srt:Sort = new Sort();
                srt.fields = [new SortField("firstname"), new SortField("lastname")];
                items.sort = srt;
                items.refresh();
            }

            /**
             * Sort the arraycollection numerically
             * */
            private function sortItemsByNumber():void{
                var srt:Sort = new Sort();
                srt.fields = [new SortField("number", true, false, true)];
                items.sort = srt;
                items.refresh();
            }

        ]]>
    </mx:Script>
</mx:Application>

Также здесь приведена ссылка на язык для sortField...

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/collections/SortField.html

... и справочник Adobe liveocs для поставщиков данных и коллекций ...

http://livedocs.adobe.com/flex/3/html/help.html?content=about_dataproviders_2.html

...и вот хороший справочник liveocs для сортировки и фильтрации ...

http://livedocs.adobe.com/flex/3/html/help.html?content=about_dataproviders_4.html

3 голосов
/ 24 февраля 2012

Вот полный пример использования сортировки в коллекции Array

http://blog.flexexamples.com/2007/08/05/sorting-an-arraycollection-using-the-sortfield-and-sort-classes/

...