2011-09-08 8 views
6

Ho un componente DataGrid spark con più colonne e voglio che l'applicazione decida in ordine decrescente sulla prima colonna in DataGrid. Vorrei utilizzare l'ordinamento predefinito predefinito che si verifica quando si fa clic sull'intestazione superiore una volta. Non ho bisogno di ordinare l'ArrayCollection con cui sto lavorando o di cambiare i comparatori.Impostazione dell'ordinamento predefinito della colonna Spark DataGrid sulla creazione dell'applicazione Completo (Flex 4.5)

Desidero anche qualsiasi ordinamento generato dall'utente, come fare clic sull'intestazione di una colonna diversa per sostituire l'ordinamento predefinito.

Qualcuno ha qualche idea su come fare a riguardo? Grazie.

+0

Con MX DataGrid fornire l'ordinamento predefinito applicando un ordinamento predefinito a ArrayCollection; quali usi possono quindi essere modificati facendo clic sulle intestazioni. Avrei pensato che Spark Grid avrebbe supportato lo stesso approccio. – JeffryHouser

risposta

10

Basta usare sortByColumn metodo:

var columnIndexes:Vector.<int> = Vector.<int>([ 0 ]); 
dataGrid.sortByColumns(columnIndexes, true); 

Ecco un esempio completo:

DataGridSort.mxml

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    creationComplete="sortDataGrid();"> 

    <fx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.collections.ArrayList; 

     [Bindable] 
     private var dataProvider:ArrayCollection = new ArrayCollection(
     [ 
      new Product("iPad", "Detroit", 599), 
      new Product("iPod", "Burbank", 49), 
      new Product("iPod Nano", "Burbank", 39), 
      new Product("Flash Drive", "Burbank", 59), 
      new Product("iPod", "Burbank", 49), 
      new Product("Galaxy Tab", "Coldbridge", 499), 
      new Product("HTC Hero", "Abidjan", 700) 
     ]); 

     private function sortDataGrid():void 
     { 
      // you can also use Vector.<int>([ 0, 1 ]); to sort by first 2 columns 
      var columnIndexes:Vector.<int> = Vector.<int>([ 0 ]); 

      // set 2nd argument to true to show sorting triangle 
      dataGrid.sortByColumns(columnIndexes, true); 
     } 

    ]]> 
    </fx:Script> 

    <s:DataGrid id="dataGrid" horizontalCenter="0" verticalCenter="0" width="200" 
     dataProvider="{dataProvider}"> 
     <s:columns> 
      <s:ArrayCollection> 
       <s:GridColumn dataField="name"/> 
       <s:GridColumn dataField="location"/> 
       <s:GridColumn dataField="price"/> 
      </s:ArrayCollection> 
     </s:columns> 
    </s:DataGrid> 

</s:Application> 

Product.as

package 
{ 
import flash.events.EventDispatcher; 

public class Product extends EventDispatcher 
{ 

    public function Product(name:String = null, location:String = null, price:Number = 0) 
    { 
     super(); 

     this.name = name; 
     this.location = location; 
     this.price = price; 
    } 

    public var name:String; 

    public var location:String; 

    public var price:Number; 

} 
} 
+0

Grazie! Questo e 'esattamente quello che stavo cercando. – buddyp450

+0

Hai qualche esperienza con l'ordinamento predefinito in un '' - Ho bisogno di questo componente per abilitare il raggruppamento – powerMicha

0

In alternativa, se non si desidera che il datagrid esegua effettivamente l'ordinamento, ad esempio quando si ha a che fare con un sistema di paging con elementi già ordinati. Estendere il datagrid spark e aggiungere il seguente metodo:

public function PlaceSortIndicator(columnIndex:uint, descending:Boolean):void 
{ 
    if(columnIndex >= 0 && columns != null && columns.length > columnIndex) 
    { 
     var column:GridColumn = columns.getItemAt(columnIndex) as GridColumn; 
     if(column != null) 
     { 
      column.sortDescending = descending; 
      if (columnHeaderGroup) 
       columnHeaderGroup.visibleSortIndicatorIndices = new <int>[columnIndex]; 
     } 
    } 
}