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 a partir datatable [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut Treeview a partir datatable
    Je pensais faire sur ma maquete un treeview. Mais je ne sais pas comment faire sa structure entierement

    j'ai une datatable de la forme suivante

    A | aa | tt
    A | aa | tu
    A | ab | st
    A | ab | su
    B | bb | uu
    B | bb | ur

    etc....

    Prmierement : je pensais a utiliser une liste deroulante pour la première colonne afin de creer une selection
    a partir de la seconde colonne serai un treenode et la 3 eme des nodes enfants.
    Mon probleme c'est que sur une sélection de la liste déroulante je peux avoir plusieur treenodes

    declarer un treenodes je pense le faire comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreeView1.Nodes.Add(New TreeNode(dataview1.rows(0)cells(2).value))

    par contre déclarer le second treenodes je ne sais pas forcement sur quelle ligne du dataview il se trouve... et surtout comment le coder pour que je deploie les nodes suivants


    Merci bien

  2. #2
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Bon voila ou j'en suis

    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
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim Nme As String = Convert.ToString(ComboBox1.SelectedItem.ToString.Substring(0, 3)) 'récupération des initiales
            Dim Dtview1 As New DataView
            Dim dtview2 As New DataView
            Dim tbl01 As New DataTable
            Dim val As String
            Dim dr As DataRow
            Dim Tab() As String
            Dim X As Integer
     
     
            'création de la table dataview avec tri par chargé d'affaires sélectionné par combobox
            With Dtview1
                .Table = DBGMAODataSet.Tables("contrat")
                .RowFilter = "[Chargé d'affaires] ='" & Nme & "'"
                .Sort = "Chantier,N° contrat ASC"
            End With
    Donc j'ai creer un premier tri de ma Datatable
    j'aimerai extraire les données de la colonne A , enlever les doublons , afin d'avoir une liste pour les treenodes.

    je ne sais pas si je peux extraire vers une variable tableau le contenue filtre?

    Merci bien

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Tu as au moins deux solutions,
    la première serait d'utiliser LINQ pour faire un distinct sur la vue .
    La deuxième est d'utiliser la méthode DataView.ToTable qui permet de faire un distinct en lui donnant en paramètre le nom des colonnes voulues...

    La première solution est plus belle mais c'est légèrement plus dur à appréhender pour un débutant.

  4. #4
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Un exemple de copie d'une colonne d'un datatble vers une variable tableau ???

  5. #5
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Bon j'ai tenté de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For a As Integer = 0 To tbl01.Rows.Count - 1
                Tab(a) = Convert.ToString(tbl01.Rows(a).Item(1))
            Next
    Mais j'ai l'erreur suivante : La référence d'objet n'est pas définie à une instance d'un objet.

    cependant dans le debug j'ai bien la valeur rechercher ???

  6. #6
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Ca serait pas moin compliqué de remplir ton treeview recursivement?

    J'suis bien prêt à t'Aider dans cette voie mais ca risque d'être pas très facile à comprendre si tu débute.

  7. #7
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    hmm recursivement attends vais prendre un Dico , en effet je debut I AM A NOOB mais j'aime coder et voir que ca fonctionne surtout. En fait c'est devenu mon DADA bien plus que Diablo 3.
    Lol

  8. #8
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Si tu obtient tes données à partir d'une BD, On peut s'arrenger pour que ton SGBD te donne tes ''node'' presque deja tout fait.

    Ya aussi peut-etre moyen de faire l'équivalent en Linq mais je m'y connait pas assez. Reste à voir ce que Sankasss en pense.

  9. #9
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Je pompe mes tables d'origines d'une base access que je fournit au fur et a mesure Reprenant l'extraction d'un AS400 par un soft fait maison d'un gars qui part a la retraite.
    L'origine de tous ça c'est que je suis à la base automaticien, j'ai fait 10 ans de maintenance dans une grosse sidérurgie. J'ai eu le flair de partir avant que ca s’écroule et donc j'arrive dans une boit qui veut un soft de type GMAO sans méme savoir ce que c'est ni leur besoin.
    Donc j’entreprends de faire une maquette en VB.net ( en me disant c'est bon de s'instruire). Donc suis pas un pro de vb.net ni de SQL ( viens de m'offrir un bouquin avec des exos pour piger le truc en SQL, et une formation pour le VB). Ouais ouais suis un peu timbré mais les Jvideos m'ennuient de plus en plus et je passe donc mon temps la dessus quand je peux.

    Tout ça pour dire faut être un peu patient pour que je pige les concepts.

    donc revenons a mes moutons , SQL obligation pour faire du VB?
    Bon aller vais remmettre mes mimines dans le cambouis

  10. #10
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Okay, merci pour les explications :p


    Si je comprend bien tu veux faire un treeview qui va t'Afficher la hiérarchie de tes données.

    Genre

    A
    |-aa
    |--|--tt
    |--|--tu
    |--ab
    |--|--st
    |--|--su
    B
    |-bb
    |--|--uu
    |--|--ur

  11. #11
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par Ashireon Voir le message
    hmm recursivement attends vais prendre un Dico
    En fait l'avantage d'une récursivité, c'est que peut importe le nombre de niveau de node, elle ressortira le bon schéma à utiliser.
    C'est en fait un système qui se rappelle tant qu'il y a des sous groupe ou tant que l'on a pas atteint une profondeur maximum (pour éviter les boucles infinies).

    Citation Envoyé par wikipédia
    Un algorithme est dit récursif s'il s'appelle lui-même.
    Citation Envoyé par Ashireon Voir le message
    en effet je debut I AM A NOOB mais j'aime coder et voir que ca fonctionne surtout. En fait c'est devenu mon DADA bien plus que Diablo 3.
    Lol


    Citation Envoyé par Saintelaitlait Voir le message
    Si tu obtient tes données à partir d'une BD, On peut s'arrenger pour que ton SGBD te donne tes ''node'' presque deja tout fait.

    Ya aussi peut-etre moyen de faire l'équivalent en Linq mais je m'y connait pas assez. Reste à voir ce que Sankasss en pense.
    La solution que j'avais proposée tenait compte de la structure actuel de la base de donnée. Pour faire de la récursivité dans la base de donnée il faudrait qu'une FK pointe sur la PK ce qui n'est pas le cas ici (Voir lien).

    Si Ashireon a envie de se lancer dans le récursif, il faudrait changer la structure de la BD...

  12. #12
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Moi je suis pret à apprendre TOUT.

    En fAit la premiere colonne n'apparait pas puisqu'elle est trie par un combobox

    selection 1 combobox fera apparaitre un treeview

    aa
    |--tt
    |--tu
    ab
    |--st
    |--su

    par exemple

  13. #13
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Bon peu importe si tu trie avec un combobox au début, aussi bien de faire ta collection de nodes tout de suite.

    Certes, comme la dit Sankassss, ton schéma de BD actuel ne permet pas de faire des requête récursive.

    Toutefois, si ta structure n'es pas appellée à changé on peut très bien s'en sortir avec du Linq. Et probablement qu'on arriverais au même résultat en SQL. Donc à toi de choisir.

    PS : En Linq c'est ultra simple je vien de le taper.

  14. #14
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par Ashireon Voir le message
    Moi je suis pret à apprendre TOUT.
    Dans ce cas fait du Linq comme Saintelaitlait te le conseil, comme marqué dans ma signature, c'est puissant et c'est plus beau
    C'est bien de le connaitre, on peut faire énormément de chose avec...

  15. #15
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Avec Linq j'arrive a ca.

    JE sais c'Est bidon j'Ai concaténé dans des String mais c'Est pour montrer l'Exemple.


  16. #16
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    y a un bon tuto pour linq to objects ? Je vais tenter de faire kk chose avec cet outil la du coup

  17. #17
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    bon j'ai reussi a transferer ma colonne dans une variable tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            X = tbl01.Rows.Count - 1
            Dim Tab(X) As String
            For a As Integer = 0 To X
                Tab(a) = tbl01.Rows(a).Item(1).ToString
            Next
    il faut que je vire les doublons du tableau à présent

  18. #18
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Si tu veux je vais t'expliquer ce que j'ai fait.

    Premièrement, une classe node

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class node
    	Public nom As String
    	Public parent As String
     
    	Public Sub New(ByVal _nom As String, ByVal _parent As String)
    		nom = _nom
    		parent = _parent
    	End Sub
    End Class
    Ensuite,

    Ta table contient

    A | aa | tt
    A | aa | tu
    A | ab | st
    A | ab | su
    B | bb | uu
    B | bb | ur

    Premièrement, j'ai récupérer les différente relations qui existe dans ton premier niveau, soit

    A | aa
    A | aa
    A | ab
    A | ab
    B | bb
    B | bb

    Et j'ai pris seulement une occurence de chaque.

    J'Ai donc fait un select des deux première colonne, avec un group by sur les deux.

    En Linq ca donne :
    ("1") et ("2") représente les noms que j'ai donné au colonnes de ma datatable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim query = From row In dt.AsEnumerable _
    			Group By Parent = row.Field(Of String)("1"), child = row.Field(Of String)("2")
    			Into count = Count()
    Et j'ai fait pareil pour le deuxième niveau de hiérarchie dans ta table. Tu fait exactement la même chose, dans une nouvelle variable évidemment, et tu décale les colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim query2 = From row In dt.AsEnumerable _
    			Group By parent = row.Field(Of String)("2"), child = row.Field(Of String)("3")
    			Into count = Count()
    C'est clair jusqu'ici?

  19. #19
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    PS: N'oublie pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Imports System.Linq
    Ensuite,

    Comme tu as surement créer ta classe node en te basant sur mon précédent message, tu va pouvoir créer une variable list(of node), elle contiendra tout tes noeuds.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim nodeList As New List(Of node)
    Grace à Linq, tes variable query et query2 contiennent un résultat de requête. Tu va pouvoir itérer dans cette collection et accéder au valeurs contenues.

    Pour ce faire, un for each fera très bien l'affaire.

    Tu boucle dans query, et pour chaque 'résultat de requête', tu instancie un nouveau node.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'For each pour parcourir la première requête Linq
    For Each ret In query
         nodeList.Add(New node(ret.child, ret.Parent))
    Next
    'Un autre for each pour la deuxième requête Linq.
    For Each ret In query2
         nodeList.Add(New node(ret.child, ret.parent))
    Next
    J'espère que tu as remarqué que ret.child et ret.parent font référence au Group By que l'on a fait dans la requête Linq

    Un coup ceci fait, nodeList devrait contenir chaque noeud de ta hiérarchie.

    J'attend ton signal pour continuer

  20. #20
    Membre averti 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
    Points : 355
    Points
    355
    Par défaut
    Amuse toi avec tout ca, essaie de bien comprendre ce que tu fait.

    Demain si tu te sent frais et dispo, on s'attaquera à la génération de ton treeview à l'Aide de la récursivité!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. remplir treeview a partir d'un datatable
    Par hachdotnet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/03/2009, 12h13
  2. charger un treeview a partir d'un dataset
    Par paquito dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 04/09/2008, 22h32
  3. Remplissage d'un Treeview a partir de la base de données
    Par Alabama-song dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 10/01/2008, 19h33
  4. Réponses: 7
    Dernier message: 11/06/2007, 11h25
  5. comment creer un treeview a partir d une table
    Par steeves5 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/06/2006, 18h03

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