Bonjour,
Je souhaiterai filtrer mes données qui sont du type
J'ai donc repris un tuto qui permet de filtrer grace à un slider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <mx:ArrayCollection id="arrColl"> <mx:source> <mx:Object label="One" value="100" subList="{toto}" /> <mx:Object label="two" value="75" subList="{toto2}" /> </mx:source> </mx:ArrayCollection> <mx:ArrayCollection id="toto"> <mx:Object label="Three" value="80" /> <mx:Object label="Four" value="200" /> </mx:ArrayCollection> <mx:ArrayCollection id="toto2"> <mx:Object label="Three11233" value="980" /> <mx:Object label="Fouré525" value="140" /> </mx:ArrayCollection>
Mon composant graphique :
Ma fonction d'init sur le creationComplete de l'appliflex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <mx:AdvancedDataGrid id="dataGrid" verticalScrollPolicy="on"> <mx:dataProvider> <mx:HierarchicalData> <mx:childrenField>subList</mx:childrenField> <mx:source>{arrColl}</mx:source> </mx:HierarchicalData> </mx:dataProvider> <mx:groupedColumns> <mx:AdvancedDataGridColumn id="labelID" dataField="label"/> <mx:AdvancedDataGridColumn id="value" dataField="value" /> </mx:groupedColumns> </mx:AdvancedDataGrid>
Mon handler sur le change event :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private function init():void { if (checkBox.selected) { for each (var item : Object in arrColl) { item.subList.filterFunction = sliderFilterFunc; item.subList.refresh(); } } }
la fonction de filtrage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private function slider_change(evt:SliderEvent):void { for each (var item : Object in arrColl) { item.subList.refresh(); } }
En gros, ça m'affiche soit tous les éléments de niveau 2 de l'arbre soit aucun....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private function sliderFilterFunc(item:Object):Boolean { var minSlider:uint = slider.values[0]; var maxSlider:uint = slider.values[1]; if ((item.value >= minSlider) && (item.value <= maxSlider)) { return true; } else { return false; } }
ce que je voudrais c'est que ça ne m'affiche les éléments de niveau 2 correspondant au filtre.
(j'ai attaché mon mxml...pour l'exemple)
Partager