Bonjour,
je récupère d'une bdd un champ nommé "sens" et valant 0, 1 ou 2. Ce champ est mappé dans une dataGrid sans soucis. Maintenant, je souhaite changer l'itemRenderer (1 ou 2 -> une image, 0 -> un label valant "inconnu").
j'ai donc associé en as3 mon itemRenderer à un dataGridColumn elle même associée à la propriété columns par la suite.
Voici mon renderer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if(entete == "sens") { colonne.itemRenderer = new ClassFactory(Sens); colonne.sortCompareFunction = comparaisonItemRenderer; // instruction finalement non indispensable, j'ai testé pour être sur... }
et là c'est le drame
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <?xml version="1.0" encoding="utf-8"?> <s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init()" > <fx:Script> <![CDATA[ import mx.controls.Image; import spark.components.Label; private function init():void { var image:Image; if(data.sens == 1) { image = new Image(); image.source = "images/up.png"; image.width = 21; image.height = 20; image.horizontalCenter = 0; group.addElement(image); } else if(data.sens == 2) { image = new Image(); image.source = "images/down.png"; image.width = 21; image.height = 20; image.horizontalCenter = 0; group.addElement(image); } else if(data.sens == 0) { var label:Label = new Label(); label.percentWidth = 100; label.text = "inconnu"; label.setStyle("horizontalAlign", "center"); group.addElement(label); } } ]]> </fx:Script> <s:Group id="group" width="100%" height="100%" /> </s:MXDataGridItemRenderer>
J'affiche correctement mes images et mon label mais le tri sur la colonne ne s'effectue plus. J'ai d'abord pensé qu'il fallait que je définisse une fonction de tri ce que j'ai fais :
->pas de changement. Ensuite j'ai modifié mon itemRenderer au plus simple c'est à dire comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 protected function comparaisonItemRenderer(obj1:Object, obj2:Object):int { return ObjectUtil.numericCompare(Number(obj1.sens), Number(obj2.sens)); }
Donc là je retrouve bien mon sens valant 0, 1 ou 2 (logique) mais mon tri fonctionne correctement !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="utf-8"?> <s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" focusEnabled="true"> <s:Label text="{data.sens}" /> </s:MXDataGridItemRenderer>
Quelqu'un voit il pourquoi mon premier itemRenderer part en vrille pour le tri ?
Merci
Partager