2012-02-24 32 views
6

Chcę sortować Arraycollection według fieldName jako rosnąco. Oto mój kod i chcę wiedzieć, czy to prawda. Masz jakieś sugestie?Jak sortować ArrayCollection w Flex

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

Odpowiedz

16

Kod masz jest prawidłowe, z wyjątkiem typu. arrCol powinien być ar. Kod wygląda prawie dokładnie tak samo jak kod na blogu Flex Examples, który również jest poprawny.

Wystarczy zmianą jest zmiana arrCol do ar jak poniżej:

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

Nie wiesz z numeryczny, ale poza tym wszystko jest prawidłowe.

3

Twój kod jest w porządku, mimo to tutaj jest kilka przykładów, w których sortowanie numeryczne i alfabetyczne jest stosowane przy kliknięciach przycisków.

Sortowanie alfabetyczne jest dobrym przykładem sortowania na 2 atrybuty. W tym przypadku sortowanie podstawowe odbywa się na "imię", sortowanie wtórne odbywa się na "nazwisko".

Sortowanie numeryczne jest dość elastyczne, jeśli podamy boolean wartość true dla parametru numerycznego pola sortowania, sortowanie będzie rzutować atrybut na liczbę i sortować według liczby. Jeśli podasz wartość logiczną false, używana jest wbudowana funkcja porównywania ciągów znaków. Każdy z elementów danych jest rzutowany na funkcję String() przed porównaniem. Z domyślną wartością null, pierwszy element danych jest introspekowany, aby zobaczyć, czy jest to liczba lub ciąg znaków, a sortowanie odbywa się w oparciu o tę introspekcję.

<?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> 

Również tutaj jest odniesienie język dla sortField ...

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

... i Adobe LiveDocs odniesienia dla dostawców danych i zbiorów ...

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

... i tutaj jest dobre odniesienie do żywiołów do sortowania i filtrowania ...

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