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 :

Remplir un treeview à partir d'une requête recursive


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut Remplir un treeview à partir d'une requête recursive
    Bonjour à vous,

    J'ai un joli problème qui m'empêche d'avancer et j'espère que vous pourrez m'aider. J'ai une table dans ma BD qui contient les relations entres mes bien matériels. Elle comprend l'id de la relation, le parent ainsi que l'enfant.

    PS : Pour ceux qui connaissent USD (fait par CA), c'est la table HIER.

    Elle permet de relier les pc, écran, câble réseau, switch, vlan etc entre eux.

    J'ai fait une requête récursive qui me retourne l'ensemble des enfants, d'un bien en particulier, sous cette forme :

    Parent Enfant
    Vlan1 switch1
    vlan1 switch2
    switch1 cable1
    Cable1 PC1
    PC1 Écran1
    PC1 Écran2
    switch1 cable2
    Cable2 PC2
    PC2 Écran
    Switch2 etc...


    Vous voyez le genre.

    Je suis maintenant rendu à afficher ce joli paquet de relations dans un arbre pour permettre de visualiser l'impact qu'aura la supression d'un bien matériel.

    Je n'ai aucune idée par où commencer. J'aimerais donc savoir si quelqu'un à une piste sur laquelle je pourrais me lancer!

    Merci beaucoup

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    par la requete il faut récupérer
    id, nom, idparent

    ensuite créer un dictionnaire (of id, node)
    et dans la boucle de lecture tu créé un node, tu l'ajoutes au dictionnaire, et tu recherches son parent dans le dictionnaire vu que tu as l'id parent pour faire dico(idparent).nodes.add(newnode)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Sinon, les TreeView présents dans certaines suites de contrôles (celles de DevExpress par exemple) savent gérer ça nativement : tu indiques juste la DataSource, le champ ID, et le champ ParentID, et il se débrouille tout seul...

  4. #4
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Merci pour les réponse rapide. J'essaie ce matin et j'vous redonne des nouvelles!

  5. #5
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Bonjour,

    Voici comment j'ai fait, pour ceux qui rencontreraient le même problème.

    Avec ce code et une requête récursive, le programme affiche la hiérarchie pour 2500 éléments, sur 5 ou 6 niveau, en même pas 2 seconde.


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
      'J'ai en paramètre la racine, et mon treeview en reférence
     
            Public Sub New(ByVal _root As String, ByVal _getParent As Boolean, ByRef _treeV As TreeView)
                'Mon araylist de node
                nodeArray = New ArrayList
                root = _root
                getParent = _getParent
                'Ma référence a mon treeview
                treeV = _treeV
                'Je crée ma collection de node 
                createNodecollection(root, getParent)
                'On vide le treeview
                treeV.Nodes.Clear()
                'On ajoute la racine
                treeV.Nodes.Add(New TreeNode(_root))
                tNode = New TreeNode
                tNode = treeV.Nodes(0)
                'On remplie de treeview en lui passant en référence tNode
                populateTreeView(_root, tNode)
                tNode.ExpandAll()
            End Sub
     
            Private Sub createNodecollection(ByVal _root As String, ByVal _getParent As Boolean)
                Dim dtHier As New DataTable
     
                'Les données servant à créer les nodes sont dans une datatable
                dtHier = getData(_root, _getParent)
                'Je remplie mon Array de Node avec l'id de l'item et son parent
                For Each row As DataRow In dtHier.Rows
                    nodeArray.Add(New node(row.Item(1), row.Item(0)))
                Next
            End Sub
     
            Private Sub populateTreeView(ByVal _parentId As String, ByRef _tNode As TreeNode)
                Dim parentNode As TreeNode
     
                For Each node As node In nodeArray
                    'Si le parent de mon node est pareil comme l'id du node parent
                    If node.parent = _parentId Then
                        'On crée un node avec l'id du node qu'on vien de trouver
                        parentNode = New TreeNode(node.ID)
                        'On ajoute le node dans la collection
                        _tNode.Nodes.Add(parentNode)
                        'Récursivité, on ré-apelle la fonction pour vérifier si le node qu'on vien d'ajouter à lui aussi un enfant.
                        'On crée une "Branche" si on veut
                        populateTreeView(node.ID, parentNode)
                    End If
                Next
            End Sub
    Donc merci pour les réponse!

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    à voir aussi, certains controles ont une méthode begininit ou beginupdate et le end qui va avec
    qui est à utiliser pour remplir entre les 2 avec plus de performances (ou sinon tenter le suspendlayout/resumelayout)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir un combo à partir d'une requête
    Par lily59 dans le forum Général Java
    Réponses: 3
    Dernier message: 16/12/2011, 11h33
  2. remplir un champ à partir d'une requête
    Par jujurochedu42 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/02/2011, 10h11
  3. Réponses: 1
    Dernier message: 18/02/2011, 12h57
  4. Remplir un TreeView à partir d'une seule table
    Par naindjardin dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/05/2009, 00h25
  5. Réponses: 1
    Dernier message: 18/03/2009, 14h03

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