Nous allons donc trier les données affichées dans un datagrid en fonction de quelques critères.

Le principe : le datagrid est rempli avec une ArrayCollection, à laquelle on applique une fonction de filtre.

[Bindable]
private var _dataProvider:ArrayCollection;
public function get dataProvider() : ArrayCollection
{
return _dataProvider;
}
 
public function set dataProvider( ac:ArrayCollection ) : void
{
_dataProvider = ac;
_dataProvider.filterFunction = filterDP;
_dataProvider.refresh();
}
<mx:DataGrid id="dg" left="10" right="10" top="65" bottom="10">
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="opCode"/>
<mx:DataGridColumn headerText="Column 2" dataField="customer_name"/>
<mx:DataGridColumn headerText="Column 3" dataField="nCmd"/>
</mx:columns>
<mx:dataProvider>
{_dataProvider}
</mx:dataProvider>
</mx:DataGrid>

Voilà pour le principe...Voyons maintenant la fonction 'FilterDP'.

private function filterDP( item:Object ) : Boolean
{
 
        return item.nCmd >= 100;
 
}

La fonction renverra TRUE pour tous les items pour lesquels la propriété nCmd est supérieure à 100.

On peut bien sûr cumuler plusieurs fonctions de tri. Un exemple :

private function filterDP( item:Object ) : Boolean
{
return filterSlider(item)
&& filterText(item)
&& filterCHB(item);
}
 
private function filterText( item:Object ) : Boolean
{
return !item.customer_name.length
 
  || item.customer_name.toUpperCase().indexOf(infos.text.toUpperCase()) >= 0;
 
}
 
private function filterSlider( item:Object ) : Boolean
{
return item.opCode >= sortSlider.values[0]
&& item.opCode <= sortSlider.values[1];
}
 
private function filterCHB( item:Object ) : Boolean
{
var isEven:Boolean = ((item.nCmd % 2) == 0) ? true : false;
return CB.selected ? isEven : true ;
}

Attention, il ne faut pas oublier de rafraichir l'ArrayCollection à chaque action de l'utilisateur (clic,frappe,etc.). De plus, il faut vérifier que l'ArrayCollection n'est pas nulle :

<mx:TextArea id="infos" 
change="if(this._dataProvider != null) this._dataProvider.refresh()"/>

Un petit exemple :

;

Voilà, de quoi vous amuser avec les filtres de données sous Flex.