Xml - TreeView : pb ^^

Résolu
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007 - 31 mai 2006 à 00:48
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 - 27 oct. 2006 à 17:46
Bonjour tout le monde, comment allez-vous dans ce monde de la programmation ^^ ?


J'ai besion de votre aide concernant un petit prog qui utilise des
documents xml et un treeview... j'ai mis ce topic ici, car meme si pour
l'instant mon pb n'est pas totalement sur le xml, je pense que je v en
avoir bientot ;p...


J'ai donc un pb avec le treeview, j'aimerais assigner plusieurs valeurs
pour un node dans le treeview, comme ca on pourrait avoir plusieurs
sortie pour un appel de node...


Javais lu un truc vachement sympa qui permettait de faire la meme chose
avec des listbox, c'était genial, mais je n'arrive pas a trouver de
meme pour les treevieew...


Bon, pour pas vous laisser sans rien sous la dent ^^ je vous passe les infos pour :


J'ai 2 fichiers xml, liste.xml :

<liste>

    <ordinateur poste="nom_du_poste">

       <fonction>fonction_de_lutilisateur</fonction>

       <nom>nom_du_susnommeplushaut</nom>

    </ordinateur>

</liste>


 et groupes.xml :

<triage>

    <organisation nom="org_01">

       <groupe nom="grp_01">

          poste_01



          poste_02


       </groupe>

    </organisation>

</triage>


de plus... j'ai réussi apres pas mal d'echecs (je suis novice en c#) a faire ca... :


XmlDocument doc_xml = new XmlDocument();

            doc_xml.Load("c:/groupes.xml");


            XmlNode
xml_org = doc_xml.DocumentElement.FirstChild; // Organisation côté Xml

            foreach (XmlNode groupe in xml_org.ChildNodes)

            {

           
    XmlNode xml_grp =
doc_xml.DocumentElement.FirstChild.FirstChild; // Groupe côté Xml

           
    TreeNode tre_grp = new
TreeNode(groupe.Attributes["nom"].InnerText); // Groupe côté Tree

                foreach (XmlNode poste in groupe.ChildNodes)

                {

           
        XmlDocument doc_xml_liste = new
XmlDocument();

           
       
doc_xml_liste.Load("c:/liste.xml");


           
        XmlNodeList recherche_poste =
doc_xml_liste.SelectNodes("//ordinateur[@poste='" + poste.InnerText +
"']");

           
        foreach (XmlNode id_poste in
recherche_poste)

                    {

           
           
tre_grp.Nodes.Add(new TreeViewNode(poste.InnerText,
id_poste.FirstChild.InnerXml, id_poste.LastChild.InnerXml));

                    }

                }

                treeView1.Nodes.Add(tre_grp);


Bon, ici le seul pb c'est ca :

tre_grp.Nodes.Add(new TreeViewNode(poste.InnerText, id_poste.FirstChild.InnerXml, id_poste.LastChild.InnerXml));


le fameux truc que j'ai mochement pompé (sur ce site en plus...) et que je n'ai pas réussi a faire marcher avec les treeviews


avez vous des idées ???

14 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 juin 2006 à 08:28
De rien, n'oublie pas de valider les réponses qui t'ont aider.
Sinon pour ton problème, essayes de mettre ça dans le 3ème foreach :

XmlDocument doc_xml_liste =
new
XmlDocument();
doc_xml_liste.Load(
"liste.xml");

XmlNode xml_rot_liste = doc_xml_liste.DocumentElement;

XmlNode recherche_poste = xml_rot_liste.SelectSingleNode(
string.Format(
"ordinateur[@poste='{0}']", poste.InnerText));

if (recherche_poste !=
null)
{
  
foreach (
XmlNode id_poste
in recherche_poste.ChildNodes)
   {
     
TreeNode tre_pst =
new
TreeNode(id_poste.FirstChild.InnerText);
// Création des nodes Postes
      tre_pst.Tag = poste.InnerText +
"," + id_poste.LastChild.InnerXml;
      tre_grp.Nodes.Add(tre_pst);
// Insertion des postes dans les groupes
   }
}

<hr size="2" /> VC# forever
=13319
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
31 mai 2006 à 08:53
Salut,
La méthode Add prendre un TreeNode et pas un TreeViewNode en argument. D'où l'erreur...

<hr size= "2" /> VC# forever
=13319
0
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
31 mai 2006 à 15:20
Tu pourrais m'en dire plus sur les TreeNode ? Comment je peux les utiliser ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
31 mai 2006 à 15:25
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
5 juin 2006 à 00:33
sinon, je suis arrivé a mettre un tag, mais le probleme c'est que je veux en mettre un autre, comment je dois faire ?
0
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
5 juin 2006 à 02:03
bon, au lieu de chercher a mettre 2 tag, g juste mis une "," entre les
2 infis et g utilisé un split. Mais g une autre question : j'aimerais
pouvoir trouver le dernier node, dans un if, pour n'executer un bout de
code que si c'est le dernier node. J'ai visual studio 2003, il ny a pas
le precieux "level" de la version 2005... avez-vous une id ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
5 juin 2006 à 09:21
Salut,
Le tag prend un object comme valeur, il suffit donc de créer une classe qui contient tout tes types et de passer cette classe à ton tag (si tu peux vraiment pas faire autrement).

Pour accéder au dernier TreeNode, est-ce que tu ne peux pas faire qqch comme ceci :
TreeNode lastNode =
this.treeView.Nodes[
this.treeView.Nodes.Count - 1];

<hr size="2" /> VC# forever
=13319
0
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
7 juin 2006 à 01:45
Merci, ca marche !!!


Autre petit probleme, avec le xml et les treeviews :

<tt>private void Form1_Load(object sender, EventArgs e)


       {


           treeView1.Nodes.Clear();


           XmlDocument doc_xml_groupes = new XmlDocument();


           doc_xml_groupes.Load("c:/groupes.xml");

          
XmlNode xml_rot_groupes = doc_xml_groupes.DocumentElement; // Root côté
Xml


           foreach (XmlNode organisation in xml_rot_groupes)


           {

              
TreeNode tre_org = new
TreeNode(organisation.Attributes["nom"].InnerText); // Création des
nodes Organisation

              
foreach (XmlNode groupe in organisation.ChildNodes)


               {

                  
TreeNode tre_grp = new TreeNode(groupe.Attributes["nom"].InnerText); //
Création des nodes Groupe

                  
foreach (XmlNode poste in groupe.ChildNodes)


                   {

                      
XmlDocument doc_xml_liste = new XmlDocument();

                      
doc_xml_liste.Load("c:/liste.xml");

                      
XmlNode xml_rot_liste = doc_xml_liste.DocumentElement;

                      
XmlNodeList recherche_poste =
xml_rot_liste.SelectNodes("//ordinateur[@poste='" + poste.InnerText +
"']");

                      
foreach (XmlNode id_poste in recherche_poste)

                      
{

                          
TreeNode tre_pst = new TreeNode(id_poste.FirstChild.InnerText); //
Création des nodes Postes

                          
tre_pst.Tag = poste.InnerText + "," + id_poste.LastChild.InnerXml;

                          
tre_grp.Nodes.Add(tre_pst); // Insertion des postes dans les groupes

                      
}


                   }

                  
tre_org.Nodes.Add(tre_grp); // Insertion des groupes dans les
organisations


               }

              
treeView1.Nodes.Add(tre_org); // Insertion des organisations dans
l'arbre


           }


       }


avec ca, ca devrait me mettre des nodes "organisations", puis de dans
des nodes "groupes" pour enfin avoir des nodes "postes", le seul pb
c'est que ca me met les nodes "postes" que dans le premier node
"organisation"... et j'arrive pas a résoudre ce pb...


...pleeeaase help...
</tt>
0
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
12 juin 2006 à 03:50
Merci, ca marche !


Sinon, j'aimerrais désactiver le déroulement des nodes quand on double click dessus, comment dous-je faire ?
0
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
12 juin 2006 à 04:36
et comment faire pour pouvoir dérouler 1 seul node a la fois, par
exemple : si un node est déroulé, quand on en déroule un autre ->
qu'il se referme ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 juin 2006 à 09:04
Valide les réponses qui t'on aidé !!!!!!!!!



Sinon, pour ta question, tu peux utiliser les events AfterSelect et BeforeSelect du TreeView et les méthodes Expand et Collapse du TreeNode.

<hr size= "2" /> VC# forever
=13319
0
Dami_bachelet Messages postés 12 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 9 janvier 2007
13 juin 2006 à 15:10
C'est bon, je viens de valider les reponces a mes questions ^^

Sinon, je n'arrive vraiment pas a trouver comment faire pour désactiver le déroulement des nodes du treeview quand on double clique et pour ne pouvoir dérouler qu'un seul node a la fois...


Je me suis vraiment cassé la tete, mais le seul truc que j'arrive a faire c pour le "déroulement unique des nodes" et encore, ca me fait un truc bizarre ou tout les nodes se ferment et ou le node en question se réouvre, mais c'est super lent...


quelqu'un aurrait une idée ?
0
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
27 oct. 2006 à 17:44
Je crois qu'il suffit de gérer l'évènement du treeview BeforeExpand.

private void tontreeview_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
    e.Cancel = true;
}
0
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
27 oct. 2006 à 17:46
Au fait ce que j'ai posté c'est pour désactiver le déroulement des nodes.
0
Rejoignez-nous