Problème pour cacher ligne selected dans datagridview
Bonjour,
Voilà mon soucis :
Je génère un datagrid avec à l'intérieur des treeviews
http://img12.imageshack.us/img12/8859/img1x.png
Voici le code qui génère mes treeview :
Code:
Call Menu_principal.treeview(Menu_principal.Datagrid1, TableActivity, "+", My.Resources.pluss)
Avec le code suivant :
Code:
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:
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 :
http://img130.imageshack.us/img130/7263/img3s.png
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 :
http://img132.imageshack.us/img132/6596/img2i.png
Voici le cas où on a cliqué sur tout réduire après avoir tout développer :
http://img180.imageshack.us/img180/254/img4j.png
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 :
http://img51.imageshack.us/img51/2429/img6c.png
La ligne sélectionnée est la "19", donc correspondant dans ma boucle à l'indice "18"
Avec l'erreur ci-dessous :
http://img708.imageshack.us/img708/5338/img5m.png
Et enfin le code qui gère tout réduire tout développer :
Code:
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:
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:
1 2
| .SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False |
Code:
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.