Вопрос

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

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();}
Это было полезно?

Решение

Код у вас правильный, за исключением типа. 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();
}

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

Другие советы

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

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

Ваш код в порядке, даже вот несколько примеров, в которых нажимается цифровой и алфавитный сорт.

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

Численное сортировка довольно гибкое, если у вас есть логическое значение true для цифрового параметра поля сортировки, сортировка будет отбрасывать атрибут на номер и сортировать по номеру. Если вы предоставляете логическое значение false, используются встроенные функции сравнения строки. Каждый из элементов данных отливается на функцию строки () до сравнения. Благодаря значением по умолчанию 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>
.

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

http://help.адобе. com / en_us / flashplatform / Справочник / ActionScript / 3 / mx / collections / sortfield.html

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

http://livedocs.Adobe.com/ flex / 3 / html / help.html? Content= quote_dataProviders_2.html

... А вот хорошие ведомости LiveCss для сортировки и фильтрации ...

http://livedocs.Adobe.com/ FLEX / 3 / HTML / HELP.HTML? CONTENT= quote_dataProviders_4.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top