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

VB.NET Discussion :

Treeview plusieurs niveaux


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Treeview plusieurs niveaux
    Bonjour,

    J'ai une base de donnée avec une table structuré ainsi :

    Nom de la table : XYZtable

    column table :
    Code
    Descr(libellé)
    ParentCode(fait référence au noeud parent si c'est "0" alors il n'a pas de parent)

    Je voudrai remplir mon treeview à partir de cette base de donnée mais à partir du noeud suivant (enfant) je n'arrive plus à le remplir.

    voici mon raisonnement pour l'instant

    Je remplis la racine du treeview (ceux qui n'ont pas de parent parentCode = "0")

    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
    Private Sub loadParentNode()
            Dim ParentNode As TreeNode
            Dim index As Integer
     
            index = 0
     
            While (index < listeAbmrCodes.size)
                Dim abmrCode As AbmrCodes = CType(listeAbmrCodes.get(index), AbmrCodes)
                If abmrCode.getParentcode = "0" Then
                    ' ParentNode = TreeViewAMBR.Nodes.Add(abmrCode.getCode, abmrCode.getCode + " - " + abmrCode.getDescr)
                    ParentNode = TreeViewAMBR.Nodes.Add(abmrCode.getCode, abmrCode.getCode + " - " + abmrCode.getDescr)
                End If
                index = index + 1
            End While
        End Sub
    Ensuite, j'essaye de remplir avec les données "enfants" qui peuvent aussi être "parents" etc...

    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
    23
    24
    25
    26
    27
    28
    Private Sub chargerListeAmbrCodes()
            loadParentNode()
     
            ' Dim ParentNode2 As TreeNode
     
            ' ParentNode = TreeViewAMBR.Nodes.Add("tv1")
     
            Dim cpt As Integer = 0
            Dim level As Integer = 0
            Dim MyNode() As TreeNode
     
            While (cpt < listeAbmrCodes.size)
     
                Dim abmrCode As AbmrCodes = CType(listeAbmrCodes.get(cpt), AbmrCodes)
     
                If abmrCode.getParentcode <> "0" Then ' pour récupérer que ceux qui on forcément un parent
     
                    MyNode = TreeViewAMBR.Nodes.Find(abmrCode.getParentcode, True)
                    MyNode(0).Nodes.Add(abmrCode.getParentcode, abmrCode.getCode + " - " + abmrCode.getDescr)
     
                    End If
     
                End If
     
                cpt = cpt + 1
            End While
     
        End Sub
    La method "Find" ne retrouve pas le noeux d de d'un enfants je n'arrive qu'a le remplir à 1 niveau.
    J'aimerai le remplir à plusieurs niveaux en respectant la structure que j'ai données à ma base (le "parent" est référencé par "parentCode").

    Pourriez-vous m'aidez ? j'ai beaucoup de mal avec ce treeview.

    Merci d'avance

    smith25

  2. #2
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 196
    Points : 331
    Points
    331
    Par défaut
    Il te faut une fonction récursive avec en paramètres, ta liste d'objet, la collection d'enfant et un code, le premier appel à cette fonction de feras avec la collection d'enfants du RootNode et le code 0, ensuite dans cette fonction tu recherche dans ta liste d'objet tous ceux qui on un code parent ègale au code passer en paramètre, pour chacun tu crée un noeud, et tu relance la même fonction mais avec la collection d'enfants du noeud que tu vient de créer et le code de l'objet (qui ne peut pas être le même que celui passer en paramètre sans quoi tu boucle à l'infini).

    La construction d'un TreeView par récursivité est un grand classique de la programmation, c'est un peu ardu à comprendre mais il faut s’accrocher car cela revient très souvent.

    Bon courage.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Tout d'abord merci pour ta réponse.

    En fait , je n'arrive justement pas à récupérer le code parent des enfants.

    Désolé, mais je ne suis pas sûre d'avoir bien compris ta solutions.

    autrement j'ai essayer de faire une fonction récursive qui ajoute un noeud mais je suis toujours bloqué au moment de la recherche. (dans mon cas FIND)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub addNode(node As List(Of TreeNode), parentNode As String, nodeText As String)
     
            node.AddRange(TreeViewAMBR.Nodes.Find(parentNode, True)) ' je n'arrive pas à recurper le code parent de l'enfant ici
            If Not node.Any Then
                node.Add(TreeViewAMBR.Nodes.Add(parentNode, nodeText))
                'je dois ajouter ma fonction addNote pour la récursive ici
            End If
            node(0).Nodes.Add(parentNode, nodeText)
     
        End Sub
    EN fait, je voulais rajouter un noeud au noeud que je venais de créer justement mais je ne sais pas comment le récupérer. Malgré les quelques tutos sur le treeview que j'ai visionné cela reste encore flou pour moi.

    cordialement

    Smith25

  4. #4
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 196
    Points : 331
    Points
    331
    Par défaut
    Tes objets doivent posséder un code ET un parent code sinon cela ne peut pas marcher. Un exemple de hierarchie. :
    Objet 1 (code 1 , parentCode 0)
    ---> Objet 3 (Code 3, parentCode 1)
    --------> Objet 5 (Code 5 , parentCode 3)
    ---> Objet 4 (Code 4 , parentCode 1)
    Objet 2 (code 2 , parentCode 0)


    Tu saisit ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Nom : hierarhy.png
Affichages : 417
Taille : 10,6 Ko

    Bien entendu. Voici ma base donnée ci-dessus. Cela devrai marcher normalement mais je n'arrive pas à accéder à l'enfant.
    Pourtant, il me trouve les premiers noeuds mais plus aux deuxième niveau. Et j'ai une class qui corresponds exactment à cette table (voir mon code dans mon premier message).
    De plus lorsqu'ajoute un noeud je mais deux paramètres (parentCode, codeText) le parentCode devrai servir de "clé".

    Voila ce qui me produit avec la method "addNode"

    Nom : voila.png
Affichages : 422
Taille : 14,6 Ko

    Voici comment je l'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     While (cpt < listeAbmrCodes.size)
     
                Dim abmrCode As AbmrCodes = CType(listeAbmrCodes.get(cpt), AbmrCodes)
     
                If abmrCode.getParentcode <> "0" Then 'ceux qui ne sont pas la racine
     
                    AddNode(abmrCode.getParentcode, abmrCode.getCode + " - " + abmrCode.getDescr)
                   cpt = cpt +1
                 end While
    Ceux qui sont la racine possèdent un parent code "0" (je le charge au début du form_Load)
    Nom : racine.png
Affichages : 324
Taille : 1,5 Ko

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    je remonte se topic car j'ai exactement le même problème
    et que j'ai compris l'origine mais pas encore trouvé une solution qui me convienne
    cf
    https://www.developpez.net/forums/d1...cage-treeview/

    comment t'en est tu sorti ?

Discussions similaires

  1. treeview dynamique plusieurs niveaux
    Par marwa_rades dans le forum ASP.NET
    Réponses: 0
    Dernier message: 08/05/2011, 18h01
  2. Binding d'un TreeView sur plusieurs niveaux avec images
    Par Spikuria dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 25/05/2009, 17h17
  3. Apache 1.3 VirtualDocumentRoot à plusieurs niveaux
    Par marcha dans le forum Apache
    Réponses: 1
    Dernier message: 25/05/2006, 20h30
  4. Plusieurs niveaux de colonnes dans TDBGrid
    Par TicTacToe dans le forum Composants VCL
    Réponses: 4
    Dernier message: 31/01/2006, 10h44
  5. Création de plusieurs niveaux de sous formulaires
    Par Farbin dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2005, 20h15

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