ArrayCollection 에 담긴 데이터를 정렬할 일이 생겼다.

ArrayCollection 은 아니지만 비슷한 유형이라 관련 자료를 찾아 보았는데, ActionScript 3.4 reference에 간략한 소스와 함께 나와 있었다.

그것을 따라하면 별 다른 문제 없이 정렬이 된다.

물론 참고해야 될 것은 ArrayCollection만이 아닌 Sort, SortField 이렇게 3개를 참고해야 한다.




아래 참고 소스는 ActinoScript 3.4 reference에서 참고 한 것이다.



 
     var col:ICollectionView = new ArrayCollection();
// In the real world, the collection would have more than one item.
col.addItem({first:"Anders", last:"Dickerson"});
// Create the Sort instance.
var sort:Sort = new Sort();
// Set the sort field; sort on the last name first, first name second.
// Both fields are case-insensitive.
sort.fields = [new SortField("last",true), new SortField("first",true)];
// Assign the Sort object to the view.
col.sort = sort;
// Apply the sort to the collection.
col.refresh();



 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="135" borderStyle="solid" layout="absolute" backgroundColor="#EFEFEF">
    <mx:Script>
        <![CDATA[
        
            import mx.collections.Sort;
            import mx.collections.SortField;
            import mx.collections.ArrayCollection;
            
            [Bindable]
            private var array:ArrayCollection;
            private var numFlag:Boolean = false;
            private var txtFlag:Boolean = false;
            
            
            /**
             *         @function        : initApp
             *         @param            : none
             *         @description    : ArrayCollection instance와 데이터 추가
             *
             * */
            private function initApp():void
            {
                array = new ArrayCollection();                ///< ArrayCollection instance
                
                array.addItem({NUM:100, TXT:"AAAAA"});        ///< add item
                array.addItem({NUM:1, TXT:"CCCCC"});
                array.addItem({NUM:10, TXT:"BBBBB"});

            }

            /**
             *         @function        :    numClickEvent
             *         @param            :    none
             *         @description    :    numFlag 를 참조하여 오름차순, 내림찬순으로 정렬한다.
             * */            
            private function numClickEvent():void
            {
                if( array != null )        ///< 만약 초기화를 통해 null이 아니라면
                {
                    var sort:Sort = new Sort();
                    sort.fields = [ new SortField("NUM", true, numFlag) ];
                    array.sort = sort;            ///< ArrayCollection 내 sort에 대입한다
                    array.refresh();            ///< 컴포넌트를 갱신한다
                    numFlag = !numFlag;
                }                
            }            
            
            /**
             *         @function        :    txtClickEvent
             *         @param            :    none
             *         @description    :    txtFlag 를 참조하여 오름차순, 내림찬순으로 정렬한다.
             * */
            private function txtClickEvent():void
            {
                if( array != null )        ///< 만약 초기화를 통해 null이 아니라면
                {
                    var sort:Sort = new Sort();
                    sort.fields = [ new SortField("TXT", true, txtFlag) ];
                    array.sort = sort;            ///< ArrayCollection 내 sort에 대입한다
                    array.refresh();            ///< 컴포넌트를 갱신한다
                    txtFlag = !txtFlag;
                }
            }
            
        ]]>
    </mx:Script>
    
    <mx:DataGrid width="100%" height="100" dataProvider="{array}" editable="false" sortableColumns="false" creationComplete="initApp()" />
    <mx:HBox width="100%" height="25" bottom="3" horizontalCenter="0" horizontalAlign="center">
        <mx:Button width="100%" label="NUM" click="numClickEvent()"/>            
        <mx:Button width="100%" label="TXT" click="txtClickEvent()"/>
    </mx:HBox>
    
</mx:Application>


아래는 결과 swf 파일.
NUM 버튼을 누르면 NUM 정렬이, TXT를 누르면 TXT 정렬이 된다.
(두번 눌렀을 경우 역순으로 정렬)





+ Recent posts