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

Windows Forms Discussion :

Remplir Treeview depuis DataTable


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 129
    Par défaut Remplir Treeview depuis DataTable
    Bonjour,

    J'essaye de construire un treeview depuis un table que je récupère depuis une base.
    Voici les tables et leur relation : image en pièce jointe (relations.jpg)

    Voici mon code que je teste sans succès depuis hier soir :
    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
     
            'Initialisation de la chaîne contenant l'instruction SQL
            Dim rqSql_Root As String = "SELECT * FROM Location ORDER BY Location_Name;"
            Dim rqSql_Nod1 As String = "SELECT Location_Name, Project_Name, Comentaire FROM Project " & _
                    "INNER JOIN (Location INNER JOIN EACB_flow ON Location.PK_Location = EACB_flow.FK_Location) " & _
                    "ON Project.PK_Project = EACB_flow.FK_Project;"
     
     
            'Indiquer au Combobox d'afficher la table retournée de TableRqst
            Dim MyRoot As DataTable = TableRqst(rqSql_Root, "Location")
            Dim MyNode1 As DataTable = TableRqst(rqSql_Nod1, "Location")
     
            For Each RootRow As DataRow In MyRoot.Rows
                TheTreeview.Nodes.Add(RootRow.Item(1))
     
                'For Each Node1row As DataRow In MyNode1.Rows
                If interfaceNode Is Nothing OrElse interfaceNode.Text <> RootRow.Item(1) Then
                    interfaceNode = rootNode.Nodes.Add(MyRoot.Rows.Item(1).ToString)
                    interfaceNode.Nodes.Add(MyNode1.Rows.Item(1).ToString)
                    'Console.WriteLine(RootRow.Item(1))
                End If
            Next RootRow
    Je desirerai obtenir la chose suivante :

    Location_Name 1
    + Project_Name 1 of Location_Name 1
    + Project_Name 2 of Location_Name 1
    + Project_Name 3 of Location_Name 1
    Location_name 2
    + Project_Name 1 of Location_Name 2
    + Project_Name 2 of Location_Name 2
    Location Name 3
    + Aucun Projet pour Location_Name 3

    Je ne sais absolument pas comment y arriver.
    Quelqu'un pourrait il me mettre sur la voie de la connaissance?

    Merci d'avance

    Anax
    Images attachées Images attachées  

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    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 193
    Par défaut
    le mieux serait d'utiliser un datareader plutot qu'un datatable, ca sera plus rapide

    dans les grandes lignes avec une seule requete ca donnerait :

    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
     
     Dim rqnodes As String = "SELECT Location_Name, Project_Name, Comentaire FROM Project " & _
                    "INNER JOIN (Location INNER JOIN EACB_flow ON Location.PK_Location = EACB_flow.FK_Location) " & _
                    "ON Project.PK_Project = EACB_flow.FK_Project ORDER BY Location_Name"
     
    'definition de la connexion
    (...)
    executereader
    dim treenodeloc as treenode ' contient le dernier treenode location ajouté
    while reader.Read
        dim loc as string = reader.getstring(0)
        dim proj as string = reader.getstring(1)
     
        if treenodeloc is nothing orelse treenodeloc.text  <> loc  then ' changement de location, donc création d'un nouveau node location
            treenodeloc = new treenode
            treeview.nodes.add(treenodeloc)
            continue while ' on passe au suivant
        end if
     
       'node loc est toujours le meme
       dim tn as new treenode
       tn.text = proj
       treenodeloc.nodes.Add(tn)
    end while

    si tu ne sais pas utiliser le reader, voir ici : http://plasserre.developpez.com/vsommair.htm

    et pour info commentaire prend 2 "m"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 129
    Par défaut
    Merci pour ta réponse
    J'ai deux petit pb ds ce que tu me montres :

    1) Je n'obtiens que 2 retours car je vois que 2 noderoot se dessiner. cela ne serait il pas du à la requete?

    2) rien ne s'affiche (niveau données). J'ai juste les "-" du noderoot qui s'affiche

    Anax

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 129
    Par défaut
    voici un petit lien que je cherche a reproduire avec ma datable
    http://www.wwwcoder.com/main/parenti...8/default.aspx

    Anax

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    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 193
    Par défaut
    debug en pas à pas pour voir ce que ca donne

    sinon j'ai oublié d'affecter treenodeloc.Text

    et la requete tu peux regarder ce qu'elle retourne
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 129
    Par défaut
    Merci pour tes conseilles qui m'ont amené à progresser fortement ds mon code.
    Donc voici le code qui marche avec la datatable
    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
     
            'Initialisation de la chaîne contenant l'instruction SQL
            Dim rqSql_Root As String = "SELECT * FROM Location ORDER BY Location_Name;"
            Dim rqSql_Nod1 As String = "SELECT PK_Location, PK_Project, Project_Name FROM Project " & _
                    "INNER JOIN (Location INNER JOIN EACB_flow ON Location.PK_Location = EACB_flow.FK_Location) " & _
                    "ON Project.PK_Project = EACB_flow.FK_Project;"
     
            Dim MyRoot As DataTable = TableRqst(rqSql_Root, "Location")
            Dim MyNode1 As DataTable = TableRqst(rqSql_Nod1, "Location")
     
            For Each RootRow As DataRow In MyRoot.Rows
                rootNode = TheTreeview.Nodes.Add(RootRow.Item(0), RootRow.Item(1))
                For Each Node1row As DataRow In MyNode1.Rows
                    If Node1row.Item(0) = rootNode.Name Then nextNode = rootNode.Nodes.Add(Node1row.Item(1), Node1row.Item(2))
                Next Node1row
            Next RootRow
    Il me reste un seul pb : comment faire pour que s'il n'y a pas de chil, il n'y ait qu'une seule fois d'ecrit : Rien?

    Merci d'avance

    Anax

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

Discussions similaires

  1. C# remplir TreevIew
    Par jpo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/05/2014, 14h31
  2. [Débutant] Remplir treeview avec un datatable
    Par Snowjia dans le forum VB.NET
    Réponses: 9
    Dernier message: 08/07/2013, 20h39
  3. remplir treeview a partir d'un datatable
    Par hachdotnet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/03/2009, 12h13
  4. Remplir datagrid depuis sql server
    Par ndiayebass dans le forum C#
    Réponses: 1
    Dernier message: 30/04/2008, 09h49
  5. [C#] Remplir treeview depuis string[] de paths
    Par joujoukinder dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/12/2006, 11h06

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