2011-09-08 65 views
6

上的默認排序我有一個火花DataGrid組件與幾列,我想我的應用程序默認降序排列在DataGrid的第一列。我想使用單擊頂部標題時出現的內置默認排序。我不需要對正在處理的ArrayCollection進行排序或更改比較器的內容。設置Spark DataGrid列在應用程序的creationComplete(Flex 4.5)

我也想要任何用戶生成的排序,如點擊不同的列標題來覆蓋默認排序。

有沒有人有關於如何去做這件事的任何想法?謝謝。

+0

對於MX DataGrid,我將通過對ArrayCollection應用默認排序來提供默認排序;然後可以通過單擊標題更改該使用。我會假設Spark Grid將支持相同的方法。 – JeffryHouser

回答

10

只需使用sortByColumn方法:

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

這是一個完整的例子:

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

謝謝!這正是我所期待的。 – buddyp450

+0

你對'中的默認排序有什麼體驗嗎? - 我需要這個組件來啓用分組 – powerMicha

0

或者,如果您不希望數據網格實際進行排序,例如,當您使用已排序的項目處理分頁系統時。擴展spark數據網格並添加以下方法:

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]; 
     } 
    } 
} 
相關問題