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 et ADO.Net


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut TreeView et ADO.Net
    Bonjour,

    J'aimerai remplir mon TreeView à partir des données situant dans ma base de données... pour l'instant j'arrive juste à remplir mon TreeView avec les enregistrements parents (Site 1..Site 2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Comm = Conn.CreateCommand
    Comm.CommandText = "SELECT IdSite, SiteName, SiteImg, SiteParent FROM Sites ORDER BY SiteNode;"
    R = Comm.ExecuteReader
    While R.Read
        Dim Rc As New TreeNode
        Rc.ImageKey = R.GetString(2)
        Rc.SelectedImageKey = R.GetString(2)
        Rc.Text = R.GetString(1)
        tv.Nodes.Add(Rc)
    End While
    R.Close()
    Sincèrement, je ne sais pas comment pouvoir afficher les enregistrements appartenant à chaque site afin de passer de ça :

    Site 1
    Site 2

    à ça :

    Site 1
    Bâtiment A
    Bâtiment B
    Site 2
    Bâtiment A

    Merci de m'aider

  2. #2
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Bonjour.

    Il te faut deux boucles pour faire ce que tu veux faire.

    La première, tu créé ton noeud parent. Tu initialise ton noeud parent avec en paramètres l'id du noeud et le libellé à donné.

    Ensuite pour chaque enregistrement enfant, tu ajoute un noeud enfant au noeud parent en cours : TonTv.nodes(idnoeudcourrant).nodes.add(idenfant, libelledetonnoeud).

    Exemple via un bout d'un de mes codes :

    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
     
    dreader_type = getArbreTypeOrientGenPec(pecSelect)
    While (dreader_type.Read)
    'La clé du noeud parent est l'id de mon enregistrement
    Dim clecourranttype As Integer = dreader_type.Item(0).ToString
    tv_orientglobalPec.Nodes.Add(clecourranttype, dreader_type.Item(1).ToString)
    '--
    dreader_choix = getArbreChoixOrientGenPec(pecSelect, clecourranttype)
    'Création des noeud enfant du noeud parent en cours
    While dreader_choix.Read
    Dim clecourrantechoix = dreader_choix.Item(0).ToString
    Dim noeudIndex As Integer = tv_orientglobalPec.Nodes.IndexOfKey(clecourranttype)
    tv_orientglobalPec.Nodes(noeudIndex).Nodes.Add(clecourrantechoix, dreader_choix.Item(1).ToString)
    End While
    End While

  3. #3
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Je reçoi un bug dans cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    While R2.Read
        Dim clecourante As Integer = R2.Item(0).ToString
        Dim noeudIndex As Integer = tv.Nodes.IndexOfKey(clecourante)
        tv.Nodes(noeudIndex).Nodes.Add(clecourante, R2.Item(1).ToString)
    End While
    noeudIndex = -1 ce qui n'est pas bon...

    L'exception est la suivante :
    Specified argument was out of the range of valid values. Parameter name: index

  4. #4
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Peux tu me montrer ton code avec ta première boucle ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Oui le voici au complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Comm.CommandText = "SELECT IdSite, SiteName, SiteImg, SiteParent FROM Sites WHERE SiteParent = 0 ORDER BY SiteNode;"
    R = Comm.ExecuteReader
    While R.Read
       ref2 = R.GetInt32(0)
       tv.Nodes.Add(ref2, R.GetString(1))
       Comm2 = New SQLiteCommand("SELECT IdSite, SiteName, SiteImg, SiteParent FROM Sites WHERE SiteParent = " & ref2 & ";", Conn)
       R2 = Comm2.ExecuteReader
       While R2.Read
           Dim clecourante As Integer = R2.GetInt32(0)
           Dim noeudIndex As Integer = tv.Nodes.IndexOfKey(clecourante)
           tv.Nodes(noeudIndex).Nodes.Add(clecourante, R2.GetString(1))
       End While
    End While
    R.Close()

  6. #6
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Dans ta deuxième boucle, il faut que tu mette la clécourrante du noeud supérieur et non celle de l'enfant que tu génère.

    Tu n'initialise pas ta clécourrante de ta première boucle qui sera passer en paramètre du noeud parent dans ta deuxième boucle.

    Si tu regarde bien, j'ai 2 clés dans mon code.

  7. #7
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Oups !!! oui tu as raison...

    Une dernière question stp... comment pouvoir affecter à chaque noeud sa propre image ?

    je faisais ça avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim rc As New TreeNode
    rc .ImageKey = R.GetString(2)
    rc .SelectedImageKey = R.GetString(2)
    rc .Text = R.GetString(1)
    tv.Nodes.Add(rc )

  8. #8
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Pour modifier les icones du treeview, il faut ajouter un composant :

    Ensuite tu y intègre tes images.

    Et pour assigner des images/icones à tes noeuds de treeview, tu as par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tv_orientglobalPec.Nodes(noeudIndex).SelectedImageIndex = ImageList1.Draw(indeximage)
    tv_orientglobalPec.Nodes(noeudIndex).ImageIndex = ImageList1.Draw(UnaAutreindeximage)

  9. #9
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Ok merci beaucoup

    mais ce qui est un peu gênant c d'avoir une structure comme celle ci :

    Site 1
    • Bâtiment A
    • Bâtiment B

    Site 2
    • Bâtiment A
    • Etage 1


  10. Je dois mettre une autre boucle ? il faut que ça soit automatiser

    PS : Etage 1 est enfant de Bâtiment A

  • #10
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Et bien c'est le principe d'un Treeview l'affichage en noeud.

    tu aura toujours une structure de ce type :
    • Noeud 01
      • Enfant 01 de Noeud 01
      • Enfant 02 de Noeud 01
        • Enfant 01 de Enfant 02
        • etc...
      • etc...
    • Etc..

  • #11
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Le problème c que je peux avoir une structure trèèèèès longue... dans ce cas je ne peux pas déterminer le nombre de boucle... chaque utilisateur enregistre sa propre structure...

    Je trouve que le fait de mettre trop de boucle n'est très performant

  • #12
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Tu as des noeud enfants rattachés à Etage ?

  • #13
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Oui je peux les avoir... tout dépend de la structure de l'entreprise qui utilises le programme... dans étage 1 ils peuvent classé les choses par département... chaque étage peut avoir un ou plusieurs départements

  • #14
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Dans ce cas, il faut que tu puisse en premier lieu definir le nombre de noeud enfant qu'il pourrai y avoir (par requête) à partir de là je pense que tu as moyen de réfléchir à un algo qui te permette de dire si il d'agit d'un nouvel enfant etc..

  • #15
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Exactement, il faut définir ce nombre sinon on va jamais finir merci pour ton aide et tes conseils

  • #16
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    De rien, bon courage pour ta prog

  • #17
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Merci

  • #18
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Malheureusement je dois ré-ouvrir cette discussion car mon problème avec les images n'a pas été résolu :

    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
    Comm = New SQLiteCommand("SELECT DISTINCT SiteImg FROM Sites;", Conn)
    R = Comm.ExecuteReader
    While R.Read
        Dim imgName As String = R.GetString(0)
        il1.Images.Add(imgName, imgLoad("data\icones\" & imgName))
    End While
    R.Close()
    Comm = Conn.CreateCommand
    Comm = New SQLiteCommand("SELECT IdSite, SiteName, SiteImg, SiteParent FROM Sites WHERE SiteParent = 0 ORDER BY SiteNode;", Conn)
    R = Comm.ExecuteReader
    While R.Read
        ref2 = R.GetInt32(0)
        tv.SelectedImageKey = R.GetString(2)
        tv.ImageKey = R.GetString(2)
        tv.Nodes.Add(ref2, R.GetString(1))
        Comm2 = New SQLiteCommand("SELECT IdSite, SiteName, SiteImg, SiteParent FROM Sites WHERE SiteParent = " & ref2 & ";", Conn)
        R2 = Comm2.ExecuteReader
        While R2.Read
            Dim clecourante = ref2
            Dim noeudIndex As Integer = tv.Nodes.IndexOfKey(clecourante)
            tv.Nodes(noeudIndex).SelectedImageKey = R2.GetString(2)
            tv.Nodes(noeudIndex).ImageKey = R2.GetString(2)
            tv.Nodes(noeudIndex).Nodes.Add(clecourante, R2.GetString(1))
         End While
         R2.Close()
    End While
    R.Close()
    Conn.Close()
    Mon programme n'affecte pas chaque image à son propre enregistrement, il prends toujours la dernière image chargée dans le ImageList

    Avez-vous une solution à ce problème ?

  • + Répondre à la discussion
    ActualitésFAQ VB.NETTUTORIELS VB.NETSOURCES VB.NETLIVRES VB.NET

    Discussions similaires

    1. [VB.NET] [ADO.NET] Clef primaire auto incrémenté
      Par Guld dans le forum Accès aux données
      Réponses: 4
      Dernier message: 25/09/2004, 20h46
    2. [VB.NET] [ADO.NET] Adapter, TableMapping et DataSet xsd
      Par neo.51 dans le forum Accès aux données
      Réponses: 14
      Dernier message: 23/09/2004, 16h52
    3. [VB.NET] [ADO.NET] DataAdapter et concaténation
      Par master56 dans le forum Accès aux données
      Réponses: 3
      Dernier message: 04/06/2004, 13h25
    4. Réponses: 5
      Dernier message: 22/12/2003, 14h18
    5. [IB v7.1][C#][ADO.NET] Démarrer avec IB 71
      Par BoeufBrocoli dans le forum InterBase
      Réponses: 14
      Dernier message: 05/08/2003, 12h25

    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