Xml - TreeView : pb ^^ [Résolu]

Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 31 mai 2006 à 00:48 - Dernière réponse : cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention
- 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 ???
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 7 juin 2006 à 08:28
3
Merci
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

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 31 mai 2006 à 08:53
0
Merci
Salut,
La méthode Add prendre un TreeNode et pas un TreeViewNode en argument. D'où l'erreur...

<hr size= "2" /> VC# forever
=13319
Commenter la réponse de cs_Bidou
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 31 mai 2006 à 15:20
0
Merci
Tu pourrais m'en dire plus sur les TreeNode ? Comment je peux les utiliser ?
Commenter la réponse de Dami_bachelet
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 31 mai 2006 à 15:25
Commenter la réponse de cs_Bidou
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 5 juin 2006 à 00:33
0
Merci
sinon, je suis arrivé a mettre un tag, mais le probleme c'est que je veux en mettre un autre, comment je dois faire ?
Commenter la réponse de Dami_bachelet
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 5 juin 2006 à 02:03
0
Merci
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 ?
Commenter la réponse de Dami_bachelet
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 5 juin 2006 à 09:21
0
Merci
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
Commenter la réponse de cs_Bidou
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 7 juin 2006 à 01:45
0
Merci
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>
Commenter la réponse de Dami_bachelet
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 12 juin 2006 à 03:50
0
Merci
Merci, ca marche !


Sinon, j'aimerrais désactiver le déroulement des nodes quand on double click dessus, comment dous-je faire ?
Commenter la réponse de Dami_bachelet
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 12 juin 2006 à 04:36
0
Merci
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 ?
Commenter la réponse de Dami_bachelet
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 12 juin 2006 à 09:04
0
Merci
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
Commenter la réponse de cs_Bidou
Dami_bachelet 12 Messages postés samedi 29 avril 2006Date d'inscription 9 janvier 2007 Dernière intervention - 13 juin 2006 à 15:10
0
Merci
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 ?
Commenter la réponse de Dami_bachelet
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 27 oct. 2006 à 17:44
0
Merci
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;
}
Commenter la réponse de cs_GG29
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 27 oct. 2006 à 17:46
0
Merci
Au fait ce que j'ai posté c'est pour désactiver le déroulement des nodes.
Commenter la réponse de cs_GG29

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.