Hi Jason,

I think I have this working as required now with just the one sort method
used by every column (I think this is OK as I have multi-column sorting
turned off).

I have moved the createColumns() method onto the MyAdvancedDataGrid class
and added the following to that class:

// map of column objects keyed against their datafields (populated by
createColumns() method)
private var mColumns:Object;
// keep track of currently sorted column
private var mSortedColumn:AdvancedDataGridColumn;

public function MyAdvancedDataGrid (id:String)
{
   <snip>
   addEventListener(AdvancedDataGridEvent.SORT, sortEventHandler);
}

private function sortEventHandler(event:AdvancedDataGridEvent):void
{
    mSortedColumn = mColumns[event.dataField];
}                                                       

Then within createColumns() every new column gets 

column.sortCompareFunction = compareExcludeSummaryRow;

where the sort method is:

                private function compareExcludeSummaryRow(obj1:Object, 
obj2:Object):int
                {               
                        // should never be in this state
                        if (mSortedColumn == null)
                        {
                                // TODO log error
                                return 0;
                        }                                                       
                
                
                        var isSortDescending:Boolean = mSortedColumn 
.sortDescending;
                        var sortField:String = mSortedColumn .dataField;
                                                
                    if (obj1.summary)
                    {
                      return isSortDescending ? -1 : 1;
                    }
                    else if (obj2.summary)
                    {
                      return isSortDescending ? 1 : -1;
                    }
                    else if (obj1[sortField] < obj2[sortField])
                        {
                      return -1;
                        }
                    else if (obj1[sortField] > obj2[sortField])
                    {
                      return 1;
                    }
                    else
                    {
                      return 0;
                    }
                }               

This seems to work nicely now, but as I say I think it is restricted to
single column sorting, which is fine for me.

Thanks for your help, and any further comments appreciated!

Dan.


Pan Troglodytes wrote:
> 
> Sorry Dan, my brain must not have been fully in gear.  You do need to
> check
> the columns sort order:
> 
>         if (obj1.summaryRow)
>           return col1.sortDescending ? -1 : 1
>         else if (obj2.summaryRow)
>           return col1.sortDescending ? 1 : -1
>         else if (obj1.value < obj2.value)
>           return -1
>         else if (obj1.value > obj2.value)
>           return 1
>         else
>           return 0;
> 
> Where col1 is the id of the column being sorted.  That should (hopefully)
> do
> it.
> 

-- 
View this message in context: 
http://www.nabble.com/AdvancedDataGrid%3A-Exclude-last-row-from-sorting-tp19458035p19511454.html
Sent from the FlexCoders mailing list archive at Nabble.com.

Reply via email to