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.