2012-02-24 2 views
6

Я хочу отсортировать Arraycollection по полюName как по возрастанию. Вот мой код, и я хочу знать, правильно ли это. Есть ли у вас какие-либо предложения?Как отсортировать ArrayCollection в 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();} 

ответ

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

Не уверен, что с числовой, но в остальном все остальное правильно.

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 LiveDocs ссылки для поставщиков данных и коллекций ...

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

... и вот хорошая справочная информация для сортировки и фильтрации ...

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

Смежные вопросы