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 :

Afficher Plusieurs niveaux de TreeNode a partir d'une BDD


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut Afficher Plusieurs niveaux de TreeNode a partir d'une BDD
    Bonjour a tous.
    Je développe sur Vb 2008 et SQL 2005.
    J'ai arrivé à créer un TreeNode pour mon application avec Parent et ses fils donc sur 2 niveaux.
    j'ai une table Tag, et Tag_ParentTag cette dernière possède la relation père-enfant.

    Tag
    IdTag------------NomTag
    1 ------------Pays
    2 ------------France
    3 ------------Lyon
    .
    .
    .

    dans la table Tag_ParentTag

    RefTag------------RefParentTag
    2 -----------1
    3 -----------2
    .
    .
    .
    donc ma node doit s'afficher comme ca:
    +Pays
    +France
    -Lyon

    je voudrais obtenir tous les fils d'un parent, et les sous-fils de ce fils et les sous-sous fils de ce sous-fils...etc
    Merci beaucoup de votre aide je l'en ai besoin.

    Voila mon code qui me permet juste d'obtenir le parent et ces fils c-a-d 2 niveaux :
    +Pays
    -France
    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
     
     
     Dim cmd As New SqlCommand("SELECT distinct Tag.NomTag,Tag_ParentTag.RefParentTag  FROM Tag_ParentTag, Tag WHERE Tag_ParentTag.RefParentTag NOT IN (SELECT RefTag FROM Tag_ParentTag)and Tag_ParentTag.RefParentTag=Tag.IdTag ", con)
            con.Open()
            Dim Mycommand As SqlCommand = con.CreateCommand()
            Dim rRoot As SqlDataReader = cmd.ExecuteReader()
            Do While rRoot.Read()
                Me.TreeView1.Nodes.Add(rRoot.Item(0))
     
            Loop
            rRoot.Close()
            con.Close()
            For j = 0 To GetData(cmd).Rows.Count - 1
                Dim cmde1 As New SqlCommand("SELECT RefTag FROM Tag_ParentTag WHERE RefParentTag='" & GetData(cmd).Rows(j).Item(1) & "'", con)
     
                For k = 0 To GetData(cmde1).Rows.Count - 1
                    Dim rqSql_Nod1 As String = "select NomTag from Tag where IdTag=any (select RefTag from Tag_ParentTag where  RefTag='" & GetData(cmde1).Rows(k).Item(0) & "')"
     
                    Dim NewCmd As New SqlCommand(rqSql_Nod1, con)
                    Mycommand.CommandText = rqSql_Nod1
     
                    For i As Integer = 0 To GetData(NewCmd).Rows.Count - 1
                        Me.TreeView1.Nodes.Item(j).Nodes.Add(GetData(NewCmd).Rows(i).Item(0))
     
     
                    Next
                Next
            Next

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    Citation Envoyé par sihammaster Voir le message
    J'ai arrivé

    aïe, ca pique les yeux !



    il y a plusieurs méthodes, plus ou moins performantes
    par contre si un enfant ne peut avoir qu'un parent il n'y a qu'une table (id, nom, (...), idparent)

    le mieux étant une requête récursive (demander à google, les exemples sont à peu près ce que tu cherches à faire d'ailleurs)

    sinon une autre méthode plus simple c'est de lire le 1er niveau (ceux qui n'ont pas de parents) puis de faire une requete qui retourne l'id et l'idparent pour les nodes ajoutés en niveau 1
    ca permet d'ajouter les nodes de niveau 2 en recherchant le node parent grace à l'idparent
    puis tous ces id, on cherche à nouveau les idparents etc... donc une requete pour le 1er niveau et une requete qui cherche les enfants, en boucle
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut
    Bonjour,
    Merci POL63 mais ou je dois positionner les boucles dans mon code?
    j'ai essayé mais toujours y'a pas de solution.
    Merci d'avance a tous.

  4. #4
    Membre très actif Avatar de The_Big_Lebowski
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 225
    Par défaut
    salut sihammaster,
    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
    Lance une requete de selection de tous tes parents
    
    
    For Chaque enregistrement des peres
    Dim tnPere as treeNode
    tnPere = Treeview.Nodes.Add ("le nom")
    tnPere.Tag = id de l'enregistrement
    
         Lance une requete sur toutes les infos Fils
              For Chaque enregistrement des Fils
                    Dim tnFils as treenode
                    tnFils = tnPere.nodes.add("Le nom")
                    tnFils.tag = id de l'info Fils
              Next
    
    Next

  5. #5
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut
    Slt The_Big_Lebowski,
    Ton Code permet de creer les parents avec leurs enfants c du niveau 1 et 2.
    Ce que je veux moi c'est de créer les fils d'un parent jusqu'au null je connais pas au prévu le nombre de fils d'un parent, et aussi un parent peut avoir un ou plusieurs fils, aussi un fils peut être parent d'un ou de plusieurs fils.....

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    renseigne toi sur la récursivité pour adapter le code qu'il te donne
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/11/2008, 10h39
  2. [MySQL] Afficher le détail d'un enregistrement à partir d'une case à cocher pour le modifier
    Par batoule80 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/10/2008, 11h15
  3. Réponses: 4
    Dernier message: 05/07/2008, 20h06
  4. Réponses: 6
    Dernier message: 04/06/2008, 15h03
  5. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

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