Bonjour,
C'est une implémentation que je fais souvent et je me dis que faire partager ma façon de faire (fonctionnelle) pourrait aider :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <mx:Script>
<![CDATA[
private function filtre1(item:Object):Boolean
{
var validite:Boolean = true;
if(cbForce.selectedItem && cbForce.selectedItem.FORCE_DE_VENTE != "Tous")
validite &&= (item.FORCE_DE_VENTE == cbForce.selectedItem.FORCE_DE_VENTE);
if(cbEditeur.selectedItem && cbEditeur.selectedItem.EDITEUR != "Tous")
validite &&= (item.EDITEUR == cbEditeur.selectedItem.EDITEUR);
if(cbClient.selectedItem && cbClient.selectedItem.CLIENT != "Tous")
validite &&= (item.CLIENT == cbClient.selectedItem.CLIENT);
if(cbDebut.selectedItem && cbDebut.selectedItem.DEBUT != "Tous")
validite &&= (item.DEBUT == cbDebut.selectedItem.DEBUT);
if(cbTaux.selectedItem && cbTaux.selectedItem.TAUX != "Tous")
validite &&= (item.TAUX == cbTaux.selectedItem.TAUX);
return validite;
}
]]>
</mx:Script>
//Mes filtres
<mx:HBox paddingBottom="15">
<mx:ComboBox id="cbForce" labelField="FORCE_DE_VENTE" change="provider.refresh()" width="100" />
<mx:ComboBox id="cbEditeur" labelField="EDITEUR" change="provider.refresh()" width="100" />
<mx:ComboBox id="cbClient" labelField="CLIENT" change="provider.refresh()" width="100" />
<mx:ComboBox id="cbDebut" labelField="DEBUT" change="provider.refresh()" width="100" labelFunction="formatComboFR" />
<mx:ComboBox id="cbTaux" labelField="TAUX" change="provider.refresh()" width="100" />
</mx:HBox>
//Ma Datagrid
<mx:DataGrid id="liste1" width="100%" height="100%" dataProvider="{provider}" allowMultipleSelection="true" >
<mx:columns>
<mx:DataGridColumn dataField="FORCE_DE_VENTE" headerText="Force de vente" width="100" />
<mx:DataGridColumn dataField="EDITEUR" headerText="Editeur" width="100" />
<mx:DataGridColumn dataField="CLIENT" headerText="Client" width="100" />
<mx:DataGridColumn dataField="DEBUT" headerText="Date début" width="100" labelFunction="formatGridFR" />
<mx:DataGridColumn dataField="TAUX" headerText="Taux" width="100" />
</mx:columns>
</mx:DataGrid> |
Cette solution gère les cas de :
- bug de sélection dans les combobox (cbForce.selectedItem && ...)
- possibibilité de tout avoir (chaque combobox contient la valeur "Tous")
- plusieurs filtres combinés
A remarquer aussi la façon que le provider de la DataGrid est déclaré qu'une seule fois
ainsi que l'évènement "change" des combobox qui vont provoquer le refresh du provider directement.
Attention le provider doit être déclaré bindable comme ceci :
[Bindable] private var provider:XMLListCollection;
J'espère que ceci aidera, bon courage
Partager