2012-02-24 13 views
6

Quiero ordenar un Arraycollection por fieldName como ascendente. Aquí está mi código y quiero saber si es correcto. ¿Tienes alguna sugerencia?Cómo ordenar un ArrayCollection en 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();} 

Respuesta

16

El código que se tiene es correcta, a excepción de un tipo. arrCol debe ser ar. El código se ve casi exactamente como el código en el blog Flex Examples, que también es correcto.

cambiar sólo es cambiar arrCol a ar, como a continuación:

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

No está seguro con numérica pero por lo demás todo lo demás es correcto.

3

Su código está bien, sin embargo, aquí hay un par de ejemplos en los que se aplica una clasificación numérica y alfabética al hacer clic en los botones.

El orden alfabético es un buen ejemplo de clasificación en 2 atributos. En este caso, la clasificación primaria se realiza en el 'primer nombre', la clasificación secundaria se realiza en el 'apellido'.

El tipo numérico es bastante flexible, si proporciona un valor booleano de verdadero para el parámetro numérico del campo de ordenación, el género asignará el atributo a un número y lo ordenará por número. Si proporciona un valor booleano de falso, se utiliza la función de comparación de cadenas incorporada. Cada elemento de datos se convierte en una función String() antes de la comparación. Con el valor predeterminado de nulo, se introspecta el primer elemento de datos para ver si se trata de un número o una cadena, y el orden procede según esa introspección.

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

También en este caso es la referencia del lenguaje para el SortField ...

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

... y referencia del Adobe LiveDocs para los proveedores de datos y colecciones ...

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

... y aquí hay una buena referencia de livedocs para clasificar y filtrar ...

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

Cuestiones relacionadas