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

Flex Discussion :

Flex, DataGrid et ItemRenderer


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut Flex, DataGrid et ItemRenderer
    Salut, je suis débutant en Flex. Et je souhaite programmer une interface de gestion en Flex.
    D'abord, je charge mes données selon le modèle suivant: MySQL -> PHP -> XML et je les affiche sans problème dans mon Datagrid.
    Cependant, j'ai des champs en BDD qui sont marqué 1 pour "Oui" et 0 pour "Non"! Ces 0 et 1 apparaissent dans le datagrid, mais je voudrais les remplacer par Non et Oui selon le cas!
    J'ai essayé de suivre un fil sur les "ItemRenderer" mais je ne tombe pas sur le bon exemple.

    La solution de traiter en amont le XML sur le serveur à l'aide de PHP ne m'intéresse pas non plus!

    Merci de m'aider.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Salut,

    Si ce n'est que du texte que tu veux afficher tu peux utiliser labelFunction qui est un attribut de ta DataGridColumn. Cet attribut attend une fonction dont la signature doit ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    labelFunction(item:Object, column:DataGridColumn):String
    La doc pour t'aider :
    http://livedocs.adobe.com/flex/3/lan...lass-list.html
    Et un exemple :
    http://blog.flexexamples.com/2007/08...item-renderer/

    ++

  3. #3
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Citation Envoyé par zwan.bourg Voir le message
    ......
    Cependant, j'ai des champs en BDD qui sont marqué 1 pour "Oui" et 0 pour "Non"!Ces 0 et 1 apparaissent dans le datagrid.....
    Bonsoir

    A mon avis, c'est ton formulaire qui envoie ces valeurs (1 et 0).

  4. #4
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Par défaut
    Quelque chose du genre devrait faire l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <mx:DataGridColumn dataField="champBoolean" labelFunction="booleanLabelFunction"/>
     
    ....
     
    protected function booleanLabelFunction(item:Object,column:DataGridColumn):String  {      
              	if(item.champBoolean == "1")
                	return "Oui";
                else
                	return "Non"; 
          	}

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    Merci bien pour votre réaction j'essaie et je vous tiens informé.

  6. #6
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Citation Envoyé par zwan.bourg Voir le message
    .....D'abord, je charge mes données selon le modèle suivant: MySQL -> PHP -> XML et je les affiche sans problème dans mon Datagrid..........
    Je me répête et je ne veux pas me faire trop insistant, mais si tu souhaites voir "OUI" pour 1, et "NON" pour 2, remplace les valeurs d'origine de ton formulaire d'enregistrement.
    Sauf chose qui m'échappe, l'ordre de traitement ci-dessus justifie bien que les valeurs sont enregistrées sous "1" et "2", plutôt que "OUI" et "NON".

  7. #7
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut il faut utiliser un itemRendrer
    crée une classe AS du style BooleanItemrendrer.as donc en gros voila le fonctionnement d'un item rendrer :

    1 - tu etends ta classe sur un conteneur HBOX, VBOX ... suivant le item rendrer que tu veux faire, parfois tu peut directement etendre sur le composant luio meme sans passer par un conteneur comme Chekbox ... dans ton cas imagone que tu veux afficher un oui ou non et en plus tu veux mettre une image de ok ou pas c'est juste de l'imagination

    2 - que tu rajoute un item rendrer à un datagrid les informations de ton dataprovider passe por un attribut qui s'appell data (tu peu mettre ce ke tu veux dedans )

    3 - tu override la fonction set data dans ton itemRendrer et tu lui dis de t'afficher ce ke tu veux car Flex prend l'affichage de l'itemRendrer comme priorité 0 si tu as définit un item Rendere sur une column bref voila le code que tu dois mettre




    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
    55
    56
    57
    package le package ke tu veu
    {
     
     
    	import mx.containers.Box;
    	import mx.containers.BoxDirection;
     
    import mx.controls.Image;
    	import mx.controls.Label;
     
    	[Bindable]
    	public class BooleanItemRenderer extends Box
    	{
     
    		private var _lab: Label = new Label();;
     
    		public function BooleanItemRenderer()
    		{
    			super();
    		}
     
    			/**
    		* Function needed when implementing a ItemRenderer.
    		* @param str the string display by default
    		* @param item the item contained in the list item object (the datProvider of the list). 
    		*/
    		override public function set data(item : Object) : void
    		{
                            if(item){
                                  // dans cette objet tu as la ligne en cours du dataGrid 			   
                               if(item.champBoolean =="0")
                                    _lab.text = "non";
                               else
                                    _lab.text = "oui";
    			}
    			super.data = item;
    		}
     
    		/**
    		 *	function needed when implementing a CellRenderer.
    		 */
    		override protected function createChildren() : void
    		{
    			super.createChildren();
    			setStyle('horizontalAlign', 'center') ;
    			this.direction = BoxDirection.HORIZONTAL;
     
    			addChild(_lab);
    		}
     
     
     
     
     
     
    	}
    }

    4 - voila ton item renderer est prés à etre utilisé

    Bon courage pour la suite

    Samy

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut Utiliser Item render et CallLater
    Hmmm, cette solution vraiment pro!!!
    Mais pour le moment je garde cela à coté: j'ai trouvé mon bonheur avec les LabelFunction

    Mais une autre question: quelqu'un pourrait m'expliquer l'utilisation de la fonction CallLater ?

    Est ce que je peux l'utiliser par exemple pour faire des manipulations sur un dataGrid (comboBox) dont le dataProvider est chargé à distance (via un HTTPService par exemple).

    Souvent j'ai des erreurs, car les fonctions se lancent avant que les données ait été complètement chargé. CallLater peut elle être une solution?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 10
    Par défaut
    Pourquoi ne pas utiliser tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <mx:DataGridColumn dataField="tonitem">
        <mx:itemRenderer>
            <mx:Component>
                <mx:Label x="25" y="10" text="{data.tonitem == 1 ? 'OUI' : 'NON'}"/>
            </mx:Component>
        </mx:itemRenderer>
    </mx:DataGridColumn>
    ?

    Je pense que c'est une des solutions des plus simple en vue du problème rencontré...

    Pour ce qui est du ComboBox et du DataGrid, que veux tu faire exactement? Un ComboBox dans une cellule du DataGrid ?
    Quand appelles tu ta fonction pour remplir le ComboBox?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut pour les 1 et 2 de la BDD
    Citation Envoyé par alain31tl Voir le message
    Je me répête et je ne veux pas me faire trop insistant, mais si tu souhaites voir "OUI" pour 1, et "NON" pour 2, remplace les valeurs d'origine de ton formulaire d'enregistrement.
    Sauf chose qui m'échappe, l'ordre de traitement ci-dessus justifie bien que les valeurs sont enregistrées sous "1" et "2", plutôt que "OUI" et "NON".
    Bien sur, c'est normal, puisque l'administration était auparavant faite en HTML/PHP, c'est des codes perso qui etait utilisé: 1 pour Oui, 0 pour Non, et encore Mr pour Monsieur, etc
    Mais, dans Flex je veux les reformater comme on le faisait en HTML pur.

    Les solutions de djmalo et ellene m'ont aider a resoudre le probleme!
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. drag&drop Flex Datagrid
    Par Space23 dans le forum Flex
    Réponses: 2
    Dernier message: 23/12/2009, 12h01
  2. Flex : combobox avec itemRenderer
    Par guiles78 dans le forum Flex
    Réponses: 2
    Dernier message: 24/07/2009, 17h28
  3. datagrid editable Itemrenderer avec checkbox
    Par Cdic83 dans le forum MXML
    Réponses: 3
    Dernier message: 18/05/2009, 22h00
  4. Réponses: 2
    Dernier message: 27/03/2009, 17h44
  5. Bug DataGrid avec ItemRenderer
    Par djmalo dans le forum Flex
    Réponses: 4
    Dernier message: 03/03/2009, 16h17

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