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 :

Ajouter un noeud fils à un arbre à partir des données d'un DataGrid


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Par défaut Ajouter un noeud fils à un arbre à partir des données d'un DataGrid
    Salut tout le monde,

    Je dispose d'un Tree Flex que j'initialise avec la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function listEntites():void{
     
    	var rootArray:Array = new Array();
    	rootArray.push({libelle:"Noeud racine", id:"1"});
    	var treeArray:Array
               var rootArrayCollection:ArrayCollection;
               rootArrayCollection = new ArrayCollection(rootArray);
               dataProviderTree = rootArrayCollection;	
    }
    Quand je veux alimenter le noeud racine avec les données d'un DataGrid (dataGridTemp dans mon exemple qui dispose d'une colonne "id" et d'une colonne "libelle") j'appel la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function ajouterFils():void{
     
    for(var i:Number=0; i < dataGridTemp.dataProvider.length; i++) {
                    var newChild:Object = new Object();
                    newChild.id = dataGridTemp.dataProvider[i].id;
                    newChild.libelle = dataGridTemp.dataProvider[i].libelle;
                    newChild.children = new ArrayCollection();
                    monTree.dataDescriptor.addChildAt(monTree.selectedItem, newChild, 0, dataProviderTree);
                }
    }
    Mon problème est que quand j'appel la fonction ajouterFils rien ne s'ajoute au noeud racine.
    Pourriez vous m'idtentifier ce qui ne va pas dans mon code?

    Je vous remercie d'avance.

    Cordialement.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Salut !

    Je ne vois pas de soucis dans ce que tu as posté. Ton problème doit venir d'ailleurs.
    Comment initialises-tu le dataprovider de ton Tree ?
    Ne ferais-tu pas une affectation après ton initialisation (après listEntites() donc), sans binder ta variable dataProviderTree sur l'attribut dataprovider de ton Tree ?

    En gros, fais-tu quelquechose comme ça (sans Binding):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTree.dataProvider = dataProviderTree;
    Ou plutôt comme ça (avec Binding):
    MXML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:DataGrid dataProvider="{listeTaches}" id="dataGridTemp"/>
    AS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BindingUtils.bindProperty(monTree, "dataProvider", this, "dataProviderTree");
    Charles.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Par défaut
    Tout d'abord merci pour ta réponse,

    J'ai trouvé un autre moyen afin d'ajouter un noeud fils à mon Tree mais ça ne marche pas complètement.

    Voici ma nouvelle fonction d'initialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    xmlList = XMLList('<node libelle="root" id ="1">' +
    		   '</node>');
    var collection:XMLListCollection = new XMLListCollection(xmlList);
    dataProviderTree= collection;
    et voici comment j'ajoute un noeud fils au noeud root:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(var i:Number=0; i < dataGridTemp.dataProvider.length; i++) {
       var childNode:XML = <node libelle="null" id="null" />;
       childNode.node.@libelle = dataGridTemp.dataProvider[i].libelle
       childNode.node.@id = dataGridTemp.dataProvider[i].id
       monTree.dataDescriptor.addChildAt(monTree.selectedItem, childNode, 0, dataProviderTree);
    }
    le seul soucis ici est que je n'arrive pas à affecter directement les attributs de LIBELLE et de ID dans <node libelle="null" id="null" /> par les valeur des champs de mon dataGrid (autrement je reçois un message d'erreur: Invalid xml name)

    Savez vous comment règler ce problème?

    Merci encore

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Par défaut
    c'est bon c'est reglé, tout ce que je devais ajouter est {} devant libelle et id, c'est comme ça que les données sont ajoutées dynamiquement.

    Voici le code final (avec initialisation de l'arbre et l'ajout des fils)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //initialisation
    xmlList = XMLList('<node libelle="root" id ="1">' +
                            '</node>');
    var collection:XMLListCollection = new XMLListCollection(xmlList);
    dataProviderTree= collection;
     
    //ajout des fils au noeud root à partir des données du dataGrid
    for(var i:Number=0; i < dataGridTemp.dataProvider.length; i++) {
       var childNode:XML = <node libelle={dataGridTemp.dataProvider[i].libelle} 
                                            id={dataGridTemp.dataProvider[i].id} />;
       monTree.dataDescriptor.addChildAt(monTree.selectedItem, childNode, 0, dataProviderTree);
    }

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Mouais....
    Les accolades permettent de mettre en place le binding (d'où mes questions sur le msg précédent).

    Là ta manière de faire me semble bof bof. Tu devrais plutôt binder ton dataprovider et donc ajouter des éléments directement dans ton attribut "collection". Ces nouveaux éléments apparaitraient alors automatiquement dans ton tree.

    Enfin c'est toi qui vois.

    Charles.

    PS : Et pense au tag Résolu ! ;-)

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

Discussions similaires

  1. Générer un arbre à partir des données
    Par daniel1985 dans le forum Général Java
    Réponses: 10
    Dernier message: 02/10/2012, 00h39
  2. Réponses: 4
    Dernier message: 13/04/2010, 07h03
  3. Réponses: 2
    Dernier message: 30/10/2007, 17h10
  4. Réponses: 3
    Dernier message: 25/07/2005, 09h40
  5. Pb d'Ajout un noeud fils dans une arborescence
    Par oramine dans le forum Oracle
    Réponses: 5
    Dernier message: 21/12/2004, 15h39

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