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 and Arraycollection


Sujet :

Flex

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut Flex and Arraycollection
    Bonjour,

    Voila je suis nouveau dans le monde de Flex et de flash et dans le cadre de mon projet de master, je dois réaliser un gros projet.

    Mon probleme est que je recupere des données d'une requete sql via un Array. J'arrive a rendre ces données accessible dans un Chart par exemple, mais je n'arrive pas a stocker mes données dans un Array ou ArrayCollection et SURTOUT etre capable de les utiliser par la suite.

    Voici mon petit code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    private function getDataListenerEvents(event:ResultEvent):void { 
     
    			gridTest.dataProvider = event.result as Array;
    			clickInfo.htmlText = "lllllllllllllllll";
    			eventsArray = event.result as ArrayCollection;
    			clickInfo.htmlText = eventsArray //PROBLEME ICI!!!
    ici, clicInfo est une zone de text me permettant de faire des tests (c'est le seul moyen que j ai trouvé)
    Donc en faisant ceci, le "gridTest" se rempli parfaitement avec les données recuperée via l'event.
    clickInfo recois bien "|||||||||||".
    D
    eventsArray est, normalement, un tableau a 2 entrées avec comme colonne ("Date",Time","Period","Rate")

    En revanche je ne sais pas quoi mettre après eventsArray pour afficher par exemple le premier champ.

    J'espère m'être bien fait comprendre, et que vous aurez la solution.

    Merci d'avance

  2. #2
    Membre habitué Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Points : 162
    Points
    162
    Par défaut
    J'avoue c'est pas évident

    Le plus simple est de placer directement les données dans le dataprovider d'un datagrid comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDG.dataProvider = event.result.results.record;
    Maintenant, s'il est important pour toi de les récupérer dans une ArrayCollection pour pouvoir les traiter par la suite (ce qui a été mon cas) je peux te proposer cette solution pas très élégante mais qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(var i:int=0 ; i<nLigne ; i++)
    {
    	ligne = new Array;
    	ligne.push(event.result.results.record[i].NOMCOLONNE1);
    	var test:int = 2;
    	ligne.push(event.result.results.record[i]['NOMCOLONNE' + test]);
    	ligne.push(event.result.results.record[i]['NOMCOLONNE3']);
    	myArrayCollection.addItem(new ArrayCollection(ligne));
    }
    J'ai ajouté un push bizarre (le deuxième) juste pour montrer comment traiter les noms de colonne à incrémentation.

    En espérant que ça t'aura aidé...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    En fait mon finale n'est pas de le mettre dans un data provider, mais plutôt de créer un <mx:accordion> avec pour chaque résultat un nouveau "tiroir".
    J'ai donc besoin de stocker ceci dans un Array/ArrayCollection afin de pouvoir m'amuser avec ces données dans mon accordion.

    En fait j'ai du mal m'exprimer car mon problème se situe surtout après cette étape, a savoir :

    Comment utiliser ces donnée stockée dans mon Array (myArray. ???)

    Désolé j'ai peur que ma question soit vraiment stupide, mais je ne trouve pas de réponses.

    Merci d'avoir pris le temps d'y répondre dans tt les cas.

  4. #4
    Membre habitué Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Points : 162
    Points
    162
    Par défaut
    En fait il faut savoir que la réponse SQL contenue dans l'event est structurée. A partir de là, tu peux en faire à peu près tout ce que tu veux. Pour naviguer au sein de cette réponse, il existe une certaine syntaxe. Dans mon premier post, il y a déjà quelques infos.

    Maintenant pour bien faire, il faudrait que tu nous dises quelle genre de requête tu as faite pour qu'on puisse te donner des indications quant à la manière de la traiter. Genre : nombre de colonne, de ligne, à quoi corresponde chacune d'elle et également quelle ligne ou colonne mettre dans les compartiments de l'accordion. Et puis je suppose que pour chacun de ces compartiments tu aura une datagrid ?

    N'hésite pas à mettre des bouts de code si tu le souhaite ou si tu trouves que ça parlera plus que des mots

  5. #5
    Membre habitué Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 126
    Points
    126
    Par défaut
    Salut

    Ta fonction "getDataListenerEvents", est appelée lorsque tout s'est bien passé pour ta requête SQL si j'ai bien compris ?

    On peut voir cette requête ? Enfin le code où tu l'exécutes quoi

    J'ai dans l'idée qu'un "Repeater" dans ton "Accordion" pourraît être sympa, mais je voudrais bien voir ce qu'il y a précisément dans event.result...

    Avec un escalier prévu pour la montée on réussi souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Avec plaisir, je ne voulais pas vous encombré avec trop de code

    Voici donc ma requête sql :
    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
    public function getEvent(){
     
                $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
    	    mysql_select_db(DATABASE_NAME);
    	    $query = "SELECT Name, DATE(DateTime) as myDate, TIME(DateTime) as myTime, Period, Trust, Text FROM events" ;
    	    $result =mysql_query($query);
    	    $ret = array();
    	    while ($row = mysql_fetch_object($result)) {
    	     $tmp = new VOEvents();
    	     $tmp->Name = $row->Name;
    	     $tmp->Date = $row->myDate;
    	     $tmp->Time = $row->myTime;
    	     $tmp->Period = $row->Period;
    	     $tmp->Trust = $row->Trust;
    	     $tmp->Text = $row->Text;
    	     $ret[] = $tmp;
    	    }
     
    	    mysql_free_result($result);
    	    return $ret;
     
    	}
    Dans tt les cas, merci de prendre un peu de temps pour regarder

  7. #7
    Membre habitué Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 126
    Points
    126
    Par défaut
    Hum... C'est donc des objets dans ton tableau.
    Essaie ceci :
    1 - Place ton composant "Accordion" où bon te semble.
    2 - Dans le code place un Repeater comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <mx:Accordion id="myCordion" width="400" height="300">
    	<mx:Repeater id="myRepeater">
    		<mx:Canvas label="{myRepeater.currentItem.Name}">
    		</mx:Canvas>
    	</mx:Repeater>
    <mx:Accordion>
    3 - Le code de ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private function getDataListenerEvents(event:ResultEvent):void
    { 
    	myRepeater.dataProvider = event.result as Array;
    }
    Dis nous si ça roule
    Le résultat attendu est autant de "tirroir" comme tu dis, que d'objets récupérés, avec comme titre de chaque "tirroir" le Name de l'objet...
    Attention les yeux ...

    Avec un escalier prévu pour la montée on réussi souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ToniConti Voir le message
    Maintenant pour bien faire, il faudrait que tu nous dises quelle genre de requête tu as faite pour qu'on puisse te donner des indications quant à la manière de la traiter. Genre : nombre de colonne, de ligne, à quoi corresponde chacune d'elle et également quelle ligne ou colonne mettre dans les compartiments de l'accordion. Et puis je suppose que pour chacun de ces compartiments tu aura une datagrid ?
    Voila, il y a ma requete ce-dessus.
    Dans mon Accordion, je pense mettre plus de detail sur l'élément afficher dans le Label. De plus il va faloir que je m'arrange pour pouvoir "cliquer" dans la "case" afin d'executer une autre action par la suite.

    En gros, mon Accordion me sert de "menu" avec un titre, lorsqu'on clique sur le titre, plus d'info s'afficher (L'accordion s'ouvre) et la possibilité de cliquer dans la case pour afficher un graphique correspondant a l'élément cliqué dans l'Accordion.

    Mais pour ca je vais chercher un peu de mon coté.

    Par contre si vous avez 1 ou 2 bon site de référence a me donner, c'est pas de refus


    Merci bcp de votre aide

    P.S. l'Accordion fonctionne

  9. #9
    Membre habitué Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 126
    Points
    126
    Par défaut
    J'ai pas tout saisi à propos de ce que tu veux afficher, graphique, etc. mais en tout cas je suis ravi que ça fonctionne .

    Là concrètement tu donnes à ton Repeater une liste d'objets, donc tu peux par la suite accéder à tous leurs attributs via myRepeater.currentItem.NomAttribut. Petite précision qui t'aidera sûrement pour la suite.. Tu peux utiliser tout autre chose qu'un Canvas dedans si besoin, même des composants personnalisés.

    Pour ce qui est des sites j'avoue que je n'en ai pas de prédilection, il y a ici évidemment, lorsque tu as une question à poser, sinon je fais des recherches google quand j'ai quelque chose de précis à trouver et en général ça fonctionne.
    Il y a bien sûr la livedoc avec des exemples qui tournent, ou l'appli TourDeFlex que j'affectionne particulièrement.

    Sinon y a les bouquins ! J'en ai acheté un chez ENI il y a quelques semaines, je l'ai trouvé plutôt riche et bien foutu Bon courage pour la suite

    Avec un escalier prévu pour la montée on réussi souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    En effet cette precision va m'aider.

    Ce qui me manque parfois dans Flex c'est de savoir quoi "mettre" pour faire telle ou telle action. myElement.QUOI??? et c'est un peu enervant je trouve car on se sent si proche du but, sans savoir pourquoi ca ne fonctionne pas.

    Bref ca va venir petit a petit.
    Grace a vous j'ai deja bien avancé...

    Merci, a bientot

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 319
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par S_KroW Voir le message
    Ce qui me manque parfois dans Flex c'est de savoir quoi "mettre" pour faire telle ou telle action. myElement.QUOI??? et c'est un peu enervant je trouve car on se sent si proche du but, sans savoir pourquoi ca ne fonctionne pas.t
    En général, si tu sais ce qu'est le type de myElement, il suffit d'en déduire les champs (et potentiellement d'utiliser l'auto-complétion).

  12. #12
    Membre habitué Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Kantizbak Voir le message
    En général, si tu sais ce qu'est le type de myElement, il suffit d'en déduire les champs (et potentiellement d'utiliser l'auto-complétion).
    En l'occurrence ici il ne peut pas utiliser l'auto-complétion directement sur l'objet myRepeater.currentItem.(...).
    Par contre effectivement il est sensé connaître ce qui se trouve dedans, bon il le sait maintenant .

    Avec un escalier prévu pour la montée on réussi souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 319
    Points : 417
    Points
    417
    Par défaut
    Chacun sa façon de faire mais je préfère, le plus souvent caster l'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (myRepeater.currentItem as MaClasse).mapropriété
    Du coup c'est plus facile pour l'auto-completion
    Sans doute une habitude de javaiste...

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/10/2012, 17h48
  2. [Flex4] Zend Amf Array PHP vers ArrayCollection Flex
    Par teumm dans le forum Flex
    Réponses: 4
    Dernier message: 02/11/2010, 23h33
  3. Flex drag and drop
    Par leyeno dans le forum Flex
    Réponses: 10
    Dernier message: 30/03/2010, 15h03
  4. Convertion Date and Time en String en WinCC flex 2007
    Par ren973 dans le forum Automation
    Réponses: 4
    Dernier message: 16/10/2008, 10h56
  5. Flex and WebService
    Par Membor dans le forum Flex
    Réponses: 1
    Dernier message: 03/09/2007, 15h09

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