Construction d'un treeview, je rame ... xD

Résolu
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011 - 26 févr. 2007 à 17:56
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011 - 27 févr. 2007 à 12:13
Bonjour :D

J'ai besoin d'un acrobate de la récursivité :D
Voici mon probleme xD

J'ai dans un dataset une table qui contient des page (internet), chacune delle peut mais ne doit pas avoir un page mere. Je doit "simplement" construire un treeview pour avoir une representation graphique de mon dataset

Exemple:

for i as Integer = 0 to Mondataset.page.count -1

   if Mondataset.page(i).parent = "" then 'si pas de parent, jajoute a la racine
   
      MonTreeView.add(MonDataSet.page(i).nom)

   else
      
      faudrai faire un truc du genre
      MonTreeView.node(MonDataSet.Parent).Node.add(MonDataSet.page(i).Nom)

      MAIS :D un pere peut avoir aussi un pere, donc faudrai remonter et faire autant de add(MonDataSet.Parent).(MonDataSet.Parent) .....add(MonDataSet.page(i)

      mais je ne sais pas a lavance jusqu'ou je vai, ni l'index a lequel se trouve chaque pere. ..

      moi je pense qu'il faudrai quand on a un pere, trouver sa place dans labre... mais enfin bon... j'ai du mal avec les treeview et la recurcivite ... :(

      pour info je suis sous visual 2003 et il y a plusieurs fonctions que je ne peut pas faire sur les treeview ... :(

   end if
next

Besoin d'aide

5 réponses

Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
27 févr. 2007 à 12:13
C'est bon, on a fait differemment.
Plutot que de chercher dans le treeview, on regarde dans le das si le noeud courant a des fille.

Ce que javais du mal cest : comment ecrire dynamique : MonTreeview.node(x).node(y).node(z).....add(montexte)

En fait, quand on ajoute un noeud, la methode add permet de recuperer le noeud qu'on vien dajouter, il suffit de passe ce noeud a la methode recursive et tout se fait tout seul xD

voici le code si sa peut aider quelqu'un :

'uniquement que si il y a des pages

If dasPages.SitePages.Count <> 0
Then

'parcourt toute les page

For i
As
Integer = 0
To dasPages.SitePages.Count - 1

'Si pas de pere, ajout un noeud a la racine

If dasPages.SitePages(i).SitePage_Parent.CompareTo(Guid.Empty) = 0
Then

Dim trvParent
As TreeNode

'Ajout le noeud et recupere le noeud qu'on vien dajouter pour le passe a la fonction TestSiEnfanttrvParent = trvPages.Nodes.Add(dasPages.SitePages(i).SitePage_Nom)

guidPere = dasPages.SitePages(i).SitePage_Id

'On passe donc le noeud qu'on vien dajouter + le guidPere pour voir si il a des enfantTestSiEnfant(guidPere, trvParent)

End
If

Next

End
If

-----------------------------------------

Function

TestSiEnfant(ByVal guidPapa As Guid, ByVal trvPapa As TreeNode)

'Parcourt tout le das pour voir si le noeud est pere

For i
As
Integer = 0
To dasPages.SitePages.Count - 1

If dasPages.SitePages(i).SitePage_Parent.CompareTo(guidPapa) = 0
Then

Dim trvParent
As TreeNodetrvParent = trvPapa.Nodes.Add(dasPages.SitePages(i).SitePage_Nom)

'Il a au moins une fille, verifier si cette fille a des fille

'Donc on lui passe lid du noeud courant + le noeud, anisi on peut continuer dajouterTestSiEnfant(dasAPages.SitePages(i).SitePage_Id, trvParent)

End
If

Next

End
Function

Voila, merci ShareVB
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
26 févr. 2007 à 22:41
salut,

quelque chose comme :

for i as Integer = 0 to Mondataset.page.count -1
   if Mondataset.page(i).parent = "" then 'si pas de parent, jajoute a la racine
      MonTreeView.nodes.add(MonDataSet.page(i).ID,MonDataSet.page(i).nom)
   else
      MonTreeView.Nodes.Find(MonDataSet.Parent,true)[0].Nodes.Add(MonDataSet.page(i).ID,MonDataSet.page(i).Nom)
   end if
next

par contre, il faut que les parents soient dans l'ordre dans la table, si un enfant est I alors le parent doit être avant I...

ShareVB
0
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
27 févr. 2007 à 09:08
Salut.
C'est bien a ça que j'avais pensé, mais malheureusement, sous visual 2003 on ne peut pas faire de node.add(id,nom) il n'y a que node.add(nom) , ce qui rend la recherche plus dificile, et il n'y a pas non plus la méthode find.... donc on doit bien faire une recherche dans le treeview manuellement ....

Y a quand même moyen ?
0
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
27 févr. 2007 à 09:36
En fait il me faudrait, si on detecte que la page a un pere, il me faudrai une fonction qui parcourt tout mon treeview et qui recherche ce ce noeud, dès quelle le trouve, elle ferai node(i).add(mapage)

Mais comment on fait une méthode récurcive qui parcrour tout le treeview tant que le noeud courant.text est <> la page mere , et dès quelle le trouve, node(i).add(mapage) ?
0

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

Posez votre question
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
27 févr. 2007 à 10:56
salut,

quelque chose comme :

Function FindNode(ByVal  racine as  TreeNodeCollection,byval search as string)
    dim n as node
    for each n in racine
       if (n.text = search) then
            return n
       end if
       dim nn as treenode = findnode(n.nodes,search)
       if not (nn is nothing) then return nn
    next
    return nothing
end function

for i as Integer = 0 to Mondataset.page.count -1
   if Mondataset.page(i).parent = "" then 'si pas de parent, jajoute a la racine
      MonTreeView.nodes.add(MonDataSet.page(i).nom)
   else
      Find(MonTreeView.Nodes,MonDataSet.Parent).Nodes.Add(MonDataSet.page(i).Nom)
   end if
next

ShareVB
0
Rejoignez-nous