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 :
Avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Call Menu_principal.treeview(Menu_principal.Datagrid1, TableActivity, "+", My.Resources.pluss)
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).
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
Je gère l'évènement pour réduire ou développer une arborescence de cette façon :
En image cela donne ceci :
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
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 :
On notera que tout est généré par le code (au niveau graphique)
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
Le problème vient donc du fait que la ligne est sélectionnée est que je lui demande de la rendre "non visible".
Or pour la gestion d'un seul noeud, il ne rencontre pas ce problème, et sélectionne le titre avant de réduire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Datagrid1.Rows(i).Visible = False
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
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.
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
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.
Partager