2011-09-08 10 views
6

Tengo un componente DataGrid de chispa con varias columnas y quiero que mi aplicación sea predeterminada en orden descendente en la primera columna de DataGrid. Me gustaría utilizar la ordenación predeterminada incorporada que se produce al hacer clic en el encabezado superior una vez. No necesito ordenar el ArrayCollection con el que estoy trabajando o cambiar lo que son los comparadores.Configuración de la clasificación predeterminada de la columna Spark DataGrid en la creación de la aplicación Completa (Flex 4.5)

También quiero cualquier clasificación generada por el usuario, como hacer clic en el encabezado de una columna diferente para anular la clasificación predeterminada.

¿Alguien tiene alguna idea sobre cómo hacerlo? Gracias.

+0

Con MX DataGrid proporcionaría una ordenación predeterminada aplicando una clasificación predeterminada a ArrayCollection; qué usos pueden cambiar haciendo clic en los encabezados. Yo hubiera asumido que Spark Grid apoyaría el mismo enfoque. – JeffryHouser

Respuesta

10

Sólo tiene que utilizar sortByColumn método:

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

Aquí está un ejemplo 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

¡Gracias! Esto es exactamente lo que estaba buscando. – buddyp450

+0

¿Tiene alguna experiencia con ordenar por defecto en un '' - Necesito este componente para habilitar la agrupación – powerMicha

0

Alternativamente, si no desea que la cuadrícula de datos realmente haga el ordenamiento, por ejemplo, cuando se trata de un sistema de paginación con elementos ya ordenados. Extienda la cuadrícula de datos de chispa y agregue el siguiente método:

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]; 
     } 
    } 
} 
Cuestiones relacionadas