Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2011, 17h49   #1
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Par défaut itemRenderer et tri dans dataGrid

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 :
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 :
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 :
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 :
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
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 19h04   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bon, j'ai résolu mon problème d'une manière pas propre

En fait, il semblerait que l'affectation d'une valeur data.* à un composant via un événement ne marche pas. Ou plutôt cela marche, mais le tri foire ensuite...

Mon alternative : ne pas passer via un événement et construire l'itemRenderer "en une seule fois" quitte à passer par une solution moche que j'expose ci dessous ^^

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<?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:Group width="100%" height="100%">
		<mx:Image source="{data.sens == 0 ? '' : data.sens == 1 ? 'images/up.png' : 'images/down.png'}" width="15" height="17" horizontalCenter="0" verticalCenter="0"/>
		<s:Label text="{data.sens == 0 ? 'inconnu' : ''}" horizontalCenter="0" verticalCenter="0"/>
	</s:Group>
 
 
 
</s:MXDataGridItemRenderer>
En gros une superposition d'un label et d'une image dont l'url peut être introuvable

C'est super moche et finalement pas optimisé mais maintenant je peux trier...

Suis pas contre une alternative voir une explication si quelqu'un a
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h59.


 
 
 
 
Partenaires

Hébergement Web