ArrayCollection 에 담긴 데이터를 정렬할 일이 생겼다.
ArrayCollection 은 아니지만 비슷한 유형이라 관련 자료를 찾아 보았는데, ActionScript 3.4 reference에 간략한 소스와 함께 나와 있었다.
그것을 따라하면 별 다른 문제 없이 정렬이 된다.
물론 참고해야 될 것은 ArrayCollection만이 아닌 Sort, SortField 이렇게 3개를 참고해야 한다.
아래 참고 소스는 ActinoScript 3.4 reference에서 참고 한 것이다.
|
<?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 정렬이 된다.
(두번 눌렀을 경우 역순으로 정렬)
NUM 버튼을 누르면 NUM 정렬이, TXT를 누르면 TXT 정렬이 된다.
(두번 눌렀을 경우 역순으로 정렬)