Лучший ответ, который я нашел на данный момент, - захват события headerRelease, когда пользователь нажимает:
<mx:DataGrid id="theGrid" x="61" y="55" width="466" height="317"
headerRelease="onHeaderRelease(event)">
Обработчик событий может затем применить порядок сортировки к данным:
private var lastIndex:int = -1;
private var desc:Boolean = false;
public function onHeaderRelease(evt:DataGridEvent):void
{
evt.preventDefault();
var srt:Sort = new Sort();
var fields:Array = new Array();
if( evt.columnIndex == lastIndex )
{
desc = !desc;
}
else
{
desc = false;
lastIndex = evt.columnIndex;
}
fields.push( new SortField( evt.dataField, false, desc ) );
if( evt.dataField != "A" )
fields.push( new SortField("A", false, desc) );
if( evt.dataField != "B" )
fields.push( new SortField("B", false, desc) );
if( evt.dataField != "C" )
fields.push( new SortField("C", false, desc) );
srt.fields = fields;
var ar:ArrayCollection = this.theGrid.dataProvider as ArrayCollection;
ar.sort = srt;
ar.refresh();
}
Однако у этого подхода есть хорошо известная проблема, заключающаяся в том, что в заголовках столбцов больше не отображаются маленькие стрелки, указывающие направление сортировки. Это побочный эффект звонка
evt.preventDefault ()
однако вы должны сделать этот вызов, иначе ваша пользовательская сортировка не будет применена.