如何在Flex中对ArrayCollection进行排序

时间:2012-02-24 10:27:13

标签: actionscript-3 flex flex3 static-data

我想按字段名称将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();}

3 个答案:

答案 0 :(得分:16)

您拥有的代码是正确的,但类型除外。 arrCol应为ar。该代码看起来几乎与博客Flex Examples中的代码完全相同,这也是正确的。

只需将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();
}

不确定数字,但其他一切都是正确的。

答案 1 :(得分:3)

答案 2 :(得分:3)

您的代码很好,即便如此,这里有一些示例,其中按钮点击应用数字和字母排序。

按字母顺序排序是对2个属性进行排序的一个很好的例子。在这种情况下,主要排序是在“firstname”上完成的,次要排序是在“lastname”上完成的。

数值排序非常灵活,如果为排序字段的数字参数提供布尔值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