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 :

[VS 2008] VB treeview / Datagridview


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut [VS 2008] VB treeview / Datagridview
    Bonjour,

    Logiciel : Visual Studio 2008
    Language : Visual Basic

    Je travaille sur un projet dans le cadre d'un stage et j'en suis à la mise en place graphique de mon programme.

    J'ai un certain nombres de datatables, que j'ai remplit et trier avec les informations souhaitées. J'ai créer un datagridview, que je remplis avec les colonnes que je sélectionne de ma datatable.

    J'aimerais avoir la possibilité, dans ma datagridview d'insérer des contrôles de treeview, donc de masquer les lignes correspondant à des sous-tâches (en tant que noeuds enfant), et donc avoir comme noeuds parents les tâches.

    L'image que je joins montre ce que ej souhaite obtenir.

    Est-il possible d'insérer donc des noeuds liés à mes lignes de datagridview ?

    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  2. #2
    Membre averti Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Points : 332
    Points
    332
    Par défaut
    espérant répondre à ta demande:

    http://blogs.msdn.com/markrideout/ar...egridview.aspx
    Si question répondue, clique sur

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    C'est pas tout simple !

    Toutefois, si les datagridView sont bindées à un DataTable et que l'on rajoute aux datatable un champ spécial "TreeState" dédié aux noeuds du TreeView, il est possible de masquer les lignes invisibles via la propriété Filter du BindingSource.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyBindingSource.Filter=(TreeState='+' OR TreeState='-' OR TreeState=' ')
    // Etats : "+" : master dépliable,  "-" : Master déplié,
    //            " " : détail visible     , "/" détail invisible
    Reste ensuite à tracer le TreeState via l'event on CellPainting du dataGridView,
    Puis à traiter les click, pour mettre à jour les TreeState dans la DataTable sous jacente.

    La différence la solution A proposée par Blade159 et la solution B ci-dessus est celle-ci :
    - pour A, master et détails sont dans la même row,
    - pour B, chaque ligne master ou détails sont dans des rows différentes.

    L'avantage de A étant que les tris et les filtres restent possibles sur les lignes Master.

    Mais, dans de tels cas la solution que j'utilise consiste à ne mettre dans la DGV que les lignes master, d'ajouter un Splitter dans la form qui permet de voir le DGV et un panneau détail qui affiche le treeView correspondant à la ligne master de la DGV selectionnée.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Merci des réponses, en ce qui concerne la solution A, j'avais trouver ce bout de code ce matin, mais c'est codé en C, et je ne connaîs absolument pas le C, et pour ta solution B je ne comprend pas tout :

    Déjà le treestate n'est pas déclaré. En fait à par mybindingsource, rien n'est déclaré, je me demande d'ailleurs si ce ne serait pas du C aussi, mais je cherche encore.

    Ensuite, si je comprend bien, tu n'utilises pas le treeview, mais tu utilise le "contrôle" des "+" et des "-" du treeview.

    Sinon j'aavais trouvé une autre solution mais un peu plus barbare, en détectant mes lignes ou je veux qu'il y ait des parents et à y mettre un boutton qui aurait la même fonction que les "+" et "-", soit un bouton à double rôle.
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Déjà le treestate n'est pas déclaré
    En effet, c'est une colonne "TreeState" qu'il faut rajouter à la datatable et initialiser pour différencier les master des esclaves.
    Ensuite, si je comprend bien, tu n'utilises pas le treeview, mais tu utilise le "contrôle" des "+" et des "-" du treeview.
    Sinon j'aavais trouvé une autre solution mais un peu plus barbare, en détectant mes lignes ou je veux qu'il y ait des parents et à y mettre un boutton qui aurait la même fonction que les "+" et "-", soit un bouton à double rôle.
    En fait, je proposais de dessiner les [+] et les [-] dans le rectangle graphique de la cellule et d'utiliser le petit rectangle autour du + et du - comme un bouton à double rôle.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Bon en gros j'ai trouvé la solution vendredi par moi-même je poste la réponse pour ceux qui chercheraient tout comme moi.

    J'ai créer une colonne tout à gauche de mon tableau (soit la colonne 0), colonne de type picture, ensuite j'ai créer une nouvelle colonne de type text (colonne 1), que j'ai appelé colonne "indice". En gros j'identifie mes tâches par la colonne "unité" car seules les sous-tâches ont des unités, et donc quand je trouve une ligne correspondant à une tâche je met un "+" dans la colonne "indice". Ceci dans le but de pouvoir detecter quand je vais cliquer sur une tâches que ej vais dérouler ( le problème étant que l'on en peut pas détecter le type de l'image).

    Ensuite je remplis les cellules correspondant aux tâches avec l'image "pluss" :

    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
    Public Sub treeview()
     
            'on récupèrele nombre maximal de lignes
            maxlignes = PlopAvanadeDataSet.Activity.Count
     
            For i = 0 To maxlignes - 1
     
                'Si la colonne unité est vide, c'est un titre
                If DataGridView1.Rows(i).Cells(4).Value = "" Then
     
                    'donc je met l'image "pluss" dans la cellule correspondante colonne 0, et je met l'indice "+" dans la cellule correspondance colonne 1 (indice) 
                    DataGridView1.Rows(i).Cells(0).Value = My.Resources.pluss
                    DataGridView1.Rows(i).Cells(1).Value = "+"
     
                Else
     
                    'autrement je met une image blanche
                    DataGridView1.Rows(i).Cells(0).Value = My.Resources.vide
                    DataGridView1.Rows(i).Visible = False
     
     
                End If
     
            Next i
     
        End Sub
    Ensuite sur déclenchement de l'évènement "click de ma datagridview"

    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
    50
    51
    52
    53
    54
    55
    56
    Public Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
     
            ligne = DataGridView1.CurrentCell.RowIndex
            colonne = DataGridView1.CurrentCell.ColumnIndex
     
            'Si la case cliquée corresponds à la colonne 0, et si la ligne cliquée correspond à un "+" dans la colonne 1
            If DataGridView1.Rows(ligne).Cells(colonne + 1).Value = "+" Then
     
                'On vient mettre un "-" dans la colonne 1, et on change l'image dans la colonne 0 en "moinss"
                DataGridView1.Rows(ligne).Cells(colonne + 1).Value = "-"
                DataGridView1.Rows(ligne).Cells(colonne).Value = My.Resources.moinss
     
                'On affiche alors les lignes cachées
                For i = ligne + 1 To maxlignes - 1
     
                    If DataGridView1.Rows(i).Cells(colonne + 1).Value = "" Then
     
                        DataGridView1.Rows(i).Visible = True
     
                    End If
     
                    If DataGridView1.Rows(i).Cells(colonne + 1).Value = "+" Then
     
                        i = maxlignes - 1
     
                    End If
     
                Next i
     
     
    'Même chose pour l'image/indice "-"
     
            ElseIf DataGridView1.Rows(ligne).Cells(colonne + 1).Value = "-" Then
     
                DataGridView1.Rows(ligne).Cells(colonne + 1).Value = "+"
                DataGridView1.Rows(ligne).Cells(colonne).Value = My.Resources.pluss
     
                For i = ligne + 1 To maxlignes - 1
     
                    If DataGridView1.Rows(i).Cells(colonne + 1).Value = "" Then
     
                        DataGridView1.Rows(i).Visible = False
     
                    End If
     
                    If DataGridView1.Rows(i).Cells(colonne + 1).Value = "-" Then
     
                        i = maxlignes - 1
     
                    End If
     
                Next i
     
            End If
     
        End Sub
    Voilà le rendu graphique,



    et bonne chance, et merci à ceux qui ont répondu (graffito, je crois d'ailleurs que c'est plus ou moins ce que tu me proposais de faire, bien que je l'ai trouvé par moi-même ce qui procure un plaisir incomensurabble)
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  7. #7
    Membre averti Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Points : 332
    Points
    332
    Par défaut
    penses au bouton
    Si question répondue, clique sur

  8. #8
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    C'est fait
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

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

Discussions similaires

  1. Mise à jour bd sql server 2008 à partir du datagridview sous vb.net 2010
    Par TERRACHER dans le forum Accès aux données
    Réponses: 7
    Dernier message: 05/09/2015, 20h35
  2. Treeview dans un DataGridview
    Par wishmasteer dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/03/2008, 09h40
  3. Drag & Drop TreeView vers DataGridView
    Par Kitano dans le forum Windows Forms
    Réponses: 11
    Dernier message: 06/09/2007, 15h56
  4. TreeView dans DataGridView
    Par rdh123 dans le forum C#
    Réponses: 4
    Dernier message: 08/07/2007, 16h32
  5. Treeview dans un datagridview.
    Par azerty53 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/02/2007, 14h51

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