IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

itemRenderer et tri dans dataGrid


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    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 : 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

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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 : 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
     
    <?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

Discussions similaires

  1. Tri dans une datagrid paginée
    Par Asce. dans le forum Flex
    Réponses: 4
    Dernier message: 21/03/2010, 21h39
  2. Réponses: 4
    Dernier message: 23/09/2009, 15h12
  3. tri et ré-insertion dans datagrid & dataset
    Par silexxx dans le forum C#
    Réponses: 0
    Dernier message: 19/08/2009, 10h56
  4. asp.net problème avec le tri dans un datagrid
    Par mekongboy dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 04/11/2008, 17h15
  5. Commande de tri dans un HeaderTemplate d'un Datagrid
    Par hokidoki dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/08/2007, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo