Bonjour,
c'est mon premier post concernant Flex !J'essaie d'optimiser un écran avec un datagrid utilisant 3 itemrenderer. Voila le topo...
J'alimente mon datagrid avec une ArrayCollection. Dans les 3 dernières colonnes, les valeurs "1", "2" ou "3" sont remplacées par des icônes pour plus d'ergionomie. A l'heure actuelle j'ai 3 composants différents pour chacune des 3 colonnes : A_StatusIcon, B_StatusIcon, C_StatusIcon.
Le truc c'est que ces 3 itemrenderer sont exactement les mêmes à un paramètre près : la colonne à laquelle ils s'intéressent. Je souhaiterais donc inclure l'index de la colonne comme paramètre pour n'utiliser plus qu'un seul composant StatusIcon partout.
Si quelqu'un à déjà résolu ce genre de cas... Merci de votre aide.
Voici le code principal :
Et ici c'est le code de l'itemrenderer A_StatusIcon.mxml.
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 <?xml version="1.0" encoding="utf-8"?> <mx:Application layout="absolute" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.treeClasses.TreeItemRenderer; import custom_components.*; [Bindable] // ça c'est l'ArrayCollection qui alimente mon DataGrid private var myDP:ArrayCollection = new ArrayCollection([ {col1:"330-200", col2:"H-AAAA", col3:"123", col4:"TLS", col5:1, col6:2, col7:3}, {col1:"330-200", col2:"H-AAAT", col3:"142", col4:"CDG", col5:1, col6:2, col7:3} ]); ]]> </mx:Script> // ça c'est le DataGrid <mx:DataGrid dataProvider="{myDP}" id="tableau" borderStyle="solid" borderThickness="0"> <mx:columns> <mx:DataGridColumn headerText="A/C Type" textAlign="center" dataField="col1" width="70"/> <mx:DataGridColumn headerText="Registr." textAlign="center" dataField="col2" width="70"/> <mx:DataGridColumn headerText="MSN" textAlign="center" dataField="col3"/> <mx:DataGridColumn headerText="Localization" textAlign="center" dataField="col4"/> // sur les 3 dernière colonnes j'appelle un itemRenderer <mx:DataGridColumn headerText="ChkA" textAlign="center" width="40" itemRenderer="custom_components.A_StatusIcon"/> <mx:DataGridColumn headerText="ChkB" textAlign="center" width="40" itemRenderer="custom_components.B_StatusIcon"/> <mx:DataGridColumn headerText="ChkC" textAlign="center" width="40" itemRenderer="custom_components.C_StatusIcon"/> </mx:columns> </mx:DataGrid> </mx:Application>
On voit que le nom de la colonne (col5) est pour le moment en dur. Les 2 autres itemrendrer sont exactement pareils sauf pour B c'est col6 et C c'est col7...
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <?xml version="1.0" encoding="utf-8"?> <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" toolTip="Status"> <mx:Script> <![CDATA[ [Embed(source="/icons/OK.png")] private var OKIcon:Class; [Embed(source="/icons/Warning.png")] private var WarningIcon:Class; [Embed(source="/icons/Problem.png")] private var ProblemIcon:Class; [Bindable] public var A_status:Class; override public function set data(value:Object):void { super.data = value; // on récupère les données de toute la ligne // puis on fait un test sur la valeur contenue dans la colonne 5 pour savoir quel icône doit être utilisé if ((value).col5 == 1) { A_status = OKIcon; } if ((value).col5 == 2) { A_status = WarningIcon; } if ((value).col5 == 3) { A_status = ProblemIcon; } } ]]> </mx:Script> <mx:Image id="imageSource" source="{A_status}"/> </mx:HBox>
Partager