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 :

Problème pour cacher ligne selected dans 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 Problème pour cacher ligne selected dans datagridview
    Bonjour,

    Voilà mon soucis :

    Je génère un datagrid avec à l'intérieur des treeviews



    Voici le code qui génère mes treeview :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Call Menu_principal.treeview(Menu_principal.Datagrid1, TableActivity, "+", My.Resources.pluss)
    Avec le code suivant :

    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
        Public Sub treeview(ByVal Grid As DataGridView, ByVal table As DataTable, ByVal signe As String, ByVal im As Image)
     
            maxlignes = table.Rows.Count
     
            For i = 0 To maxlignes - 1
     
                If Grid.Rows(i).Cells(4).Value = "" Then
     
                    Grid.Rows(i).Cells(0).Value = im
                    Grid.Rows(i).Cells(1).Value = signe
     
                    'Au passage on met les cellules des titres et des numéro de ligne en gras
                    Grid.Item(2, i).Style.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold)
                    Grid.Item(3, i).Style.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold)
                    Grid.Rows(i).Cells(5).Value = System.DBNull.Value
                    Grid.Rows(i).Cells(6).Value = System.DBNull.Value
                    Grid.Rows(i).Cells(7).Value = System.DBNull.Value
     
                Else
     
                    Grid.Rows(i).Cells(0).Value = My.Resources.vide
                    Grid.Rows(i).Visible = False
     
                End If
     
            Next i
     
        End Sub
    De base, au chargement de l'affichage, je les met tous réduit, de sorte à ce que l'on voit uniquement les titres (en gras).

    Je gère l'évènement pour réduire ou développer une arborescence de cette façon :

    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
    57
        Public Sub DataGrid1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Datagrid1.CellClick
     
            ligne = Datagrid1.CurrentCell.RowIndex
            colonne = Datagrid1.CurrentCell.ColumnIndex
     
            maxlignes = TableActivity.Rows.Count
     
            'Ce qui se produit quand on clique sur le "+" ou le "-" du treeview
            'Image qui fonctionne comme un bouton à double commande
     
            'cas du "+"
            If colonne = 0 And Datagrid1.Rows(ligne).Cells(1).Value = "+" Then
     
                Datagrid1.Rows(ligne).Cells(1).Value = "-"
                Datagrid1.Rows(ligne).Cells(0).Value = My.Resources.moinss
     
                For i = ligne + 1 To maxlignes - 1
     
                    If Datagrid1.Rows(i).Cells(1).Value = "" Then
     
                        Datagrid1.Rows(i).Visible = True
     
                    End If
     
                    If Datagrid1.Rows(i).Cells(1).Value = "+" Or Datagrid1.Rows(i).Cells(1).Value = "-" Then
     
                        Exit For
     
                    End If
     
                Next i
     
                'cas du "-"
            ElseIf colonne = 0 And Datagrid1.Rows(ligne).Cells(1).Value = "-" Then
     
                Datagrid1.Rows(ligne).Cells(1).Value = "+"
                Datagrid1.Rows(ligne).Cells(0).Value = My.Resources.pluss
     
                For i = ligne + 1 To maxlignes - 1
     
                    If Datagrid1.Rows(i).Cells(1).Value = "" Then
     
                        Datagrid1.Rows(i).Visible = False
     
                    End If
     
                    If Datagrid1.Rows(i).Cells(1).Value = "-" Or Datagrid1.Rows(i).Cells(1).Value = "+" Then
     
                        Exit For
     
                    End If
     
                Next i
     
            End If
     
        End Sub
    En image cela donne ceci :



    A ce niveau là, tout marche niquel, même quand j'ai un sous-titre qui est sélectionné et que je réduit le titre correspondant (il me sélectionne alors le titre).

    Le problème arrive maintenant :

    J'ai rajouter un bouton qui permet de tout réduire ou de tout développer:


    Voici le cas où on a cliqué sur tout développer :




    Voici le cas où on a cliqué sur tout réduire après avoir tout développer :



    A noter que avant de cliquer un titre était sélectionné.

    Enfin voici le problème, le cas où on clique sur tout réduire lorsque l'on a une ligne "sous-titre" sélectionnée :



    La ligne sélectionnée est la "19", donc correspondant dans ma boucle à l'indice "18"

    Avec l'erreur ci-dessous :




    Et enfin le code qui gère tout réduire tout développer :

    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
        Private Sub Btdevred_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btdevred.MouseClick
     
            maxlignes = Datagrid1.Rows.Count
     
            For i = 0 To maxlignes - 1
     
                If devredindice = 0 Then
     
                    If Datagrid1.Rows(i).Cells(1).Value = "" Then
     
                        Datagrid1.Rows(i).Visible = True
     
                    Else
     
                        Datagrid1.Rows(i).Cells(0).Value = My.Resources.moinss
                        Datagrid1.Rows(i).Cells(1).Value = "-"
     
                    End If
     
                    If i = maxlignes - 1 Then
     
                        devredindice = 1
                        Btdevred.Image = My.Resources.Btreduc
     
                    End If
     
     
                ElseIf devredindice = 1 Then
     
                    If Datagrid1.Rows(i).Cells(1).Value = "" Then
     
                        Datagrid1.Rows(i).Visible = False
     
                    Else
     
                        Datagrid1.Rows(i).Cells(0).Value = My.Resources.pluss
                        Datagrid1.Rows(i).Cells(1).Value = "+"
     
                    End If
     
                    If i = maxlignes - 1 Then
     
                        devredindice = 0
                        Btdevred.Image = My.Resources.Btdevelop
     
                    End If
     
                End If
     
            Next i
     
        End Sub
    On notera que tout est généré par le code (au niveau graphique)

    Le problème vient donc du fait que la ligne est sélectionnée est que je lui demande de la rendre "non visible".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        Datagrid1.Rows(i).Visible = False
    Or pour la gestion d'un seul noeud, il ne rencontre pas ce problème, et sélectionne le titre avant de réduire.

    J'ai essayé de multiple facon de déselctionné la ligne, d'en sélectionné une autre, mais rien à faire toujours la même erreur :

    Configuration de la sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .MultiSelect = False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Déselection de l'unique item de la collection des lignes sélectionnée
            Datagrid1.SelectedRows.Item(0).Selected = False
     
    'Suppression des items de cette même collection
            Datagrid1.SelectionClear()
     
    'Déselection de la ligne si elle est sélectionnée
            If Datagrid1.Rows(i).Selected = True Then
     
                Datagrid1.Rows(i).Selected = False
     
            End If
    Rien ne fonctionne, quelle est la solution SVP. ET pourquoi pour un noeud unique je n'ai aucun problème. Help me plz, j'ai beau chercher sur le net et avec ma tête, je n'arrive pas à résoudre ce problème.

    PS : je ne peux pas passer par un dataview, et cacher mes lignes dedans du fait que j'ajoute mes images dans ma datagridview.

    Merci de vos réponses.

  2. #2
    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
    Et bien voila la solution, comme quoi que VB. Net des fois se fout bien de notre gueule :

    Au lieu de sélectionner une ligne qui ne sera pas caché, juste avant le code pour tout réduire, il fallait en fait sélectionner une "CELLULE", et non une ligne.

    Le fait d'être en FullRowSelect m'a donc induit en erreur, et m'a donc fait me creuser les méninges pendant quelques longues heures, où l'on devient fou à ne pas comprendre pourquoi la logique ne fonctionne pas.

    Conclusion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Datagrid1.Rows(0).Cells(0).Selected = True

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/12/2009, 11h20
  2. Probléme pour charger une List dans un s:select
    Par Elthriel dans le forum Struts 2
    Réponses: 10
    Dernier message: 17/07/2008, 11h21
  3. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49
  4. [PDE] Problème pour sauvegarder une modif dans un éditeur
    Par simsky dans le forum Eclipse Java
    Réponses: 11
    Dernier message: 11/08/2005, 15h05
  5. Problème pour afficher un contrôle dans un formulaire
    Par JahRastafari dans le forum IHM
    Réponses: 5
    Dernier message: 16/06/2005, 10h15

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