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.

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...
}
Voici mon renderer :

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>
et là c'est le drame

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 :

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));				
}
->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
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>
Donc là je retrouve bien mon sens valant 0, 1 ou 2 (logique) mais mon tri fonctionne correctement !

Quelqu'un voit il pourquoi mon premier itemRenderer part en vrille pour le tri ?

Merci