You can sort Date objects by sorting on their numerical getTime() value, i.e.

<mx:Script>
  private function sortColumn(evt:Object):Void {
    if (evt.target.sortDirection == "DESC") {
      var arrayFlags:Number = Array.DESCENDING;
    } else {
        var arrayFlags:Number = Array.ASCENDING;
    }
    evt.target.sortItems(sortByDate, arrayFlags);
  }

  public function sortByDate(itemA:Object, itemB:Object, flags:Number):Number {
    var a:Date = itemA.date;
    var b:Date = itemB.date;
    if (flags == Array.ASCENDING) {
      if (a.getTime() < b.getTime()) return -1;
      if (a.getTime() == b.getTime()) return 0;
      if (a.getTime() > b.getTime()) return 1;
    } else {
      if (a.getTime() < b.getTime()) return 1;
      if (a.getTime() == b.getTime()) return 0;
      if (a.getTime() > b.getTime()) return -1;
    }
  }
</mx:Script>

<mx:DataGrid 
  id="dateGrid" 
  dataProvider="{data}"
  headerRelease="sortColumn(event)" 
  >
  <mx:columns>
    <mx:Array>
      <mx:DataGridColumn sortable="true" columnName="date" headerText="Date" />
    </mx:Array>
  </mx:columns>
</mx:DataGrid>


Dirk.


> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED]
> Behalf Of Sean McKibben
> Sent: Tuesday, June 14, 2005 9:35 PM
> To: [email protected]
> Subject: [flexcoders] Design flaw in DataGrid sorting
> 
> 
> I have to call the data grid's sorting mechanism flawed.
> 
> Let's examine a case where you want to sort a dataGrid by a date  
> column. In all likelihood, you're going to have a labelFunction to  
> format your date objects into a string. Depending on your locale,  
> that string is probably not what you want to sort on (i.e. 02/04/05  
> comes before 02/03/06 on the calendar, but not as a string), 
> so you'd  
> like to write a sortCompare function for that column.
> 
> Unfortunately, the sortCompare function only receives the string  
> value from the labelFunction, so you'd either have to do some very  
> slow string parsing, or sort based on the results from the  
> labelFunction alone. You don't get a chance to compare any more  
> information about a row than the string returned by a labelFunction,  
> and the labelFunction can only return a string.
> 
> Not a good way to do it, Macromedia!
> 
> So, what is the best workaround? Let it sort once, then resort using  
> the headerRelease event and operating on the DataProvider? (assuming  
> headerRelease fires after sorting is done - contrary to the  
> documentation, but in line with Ailstair McLeod's tests)
> 
> 
> Sean
> 
> 
> 
>  
> Yahoo! Groups Links
> 
> 
> 
>  
> 
> 
> 
> 


 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to