dictionnaire et datagridview
Bonjour tout le monde,
Alors voila :
J'utilise un 1er DGV (DGVChoixPertes) lequel affiche en colonne cachée (index = 0) l'Id de le perte et le nom visible par l'utilisateur, et sur l'évènement CellClick, l'affichage dans un 2ème DGV de lignes pouvant être modifiées par l'utilisateur.
Quand il clique sur une autre ligne de DGVChoixPertes, je stock dans un dictionnaire les lignes remplies (si il y en a) pour pouvoir les réafficher en cas de retour sur une ligne précédente.
Le soucis c'est qu'il ne me réaffiche pas les données saisies dans les cellules, il remet bien le même nombre de lignes mais vides...
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
| Private Sub DGVChoixPerte_CellClick(ByVal sender As DataGridView, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DGVChoixPerte.CellClick
'Si le dico ne contient pas encore de référence à la perte choisie, on lui ajoute une nouvelle arraylist pour cette dernière
If Not dico.ContainsKey(sender.SelectedCells(0).Value) Then
dico.Add(sender.SelectedCells(0).Value, New ArrayList)
End If
'Stockage des lignes dans l'Arraylist du dico qui va bien
CType(dico.Item(sender.SelectedCells(DGVPertes.Tag).Value), ArrayList).Clear()
For Each row As DataGridViewRow In DGVPertes.Rows
CType(dico.Item(sender.SelectedCells(DGVPertes.Tag).Value), ArrayList).Add(row)
Next
'On efface les lignes à l'écran
DGVPertes.Rows.Clear()
'Si l'Arraylist qui référence la perte choisie contient des lignes, on les affiche
If CType(dico.Item(sender.SelectedCells(0).Value), ArrayList).Count > 0 Then
Dim i As Integer = 0
For i = 0 To i = CType(dico.Item(sender.SelectedCells(0).Value), ArrayList).Count - 1
DGVPertes.Rows.Add(CType(dico.Item(sender.SelectedCells(0).Value), ArrayList).Item(i))
Next
End If
'On tag la DataGridView pour le prochain passage
DGVPertes.Tag = DGVChoixPerte.SelectedCells(0).Value
'Rafraichissement du dataSource pour le choix de la sous-perte
Dim newDataSource As New ArrayList
For Each sp As SousPerte In listeSousPerte
If sp.PerteId = sender.SelectedCells(0).Value Then
newDataSource.Add(sp)
End If
Next
ColumnSousPerte.DataSource = newDataSource
'On ajoute une nouvelle ligne pour saisie utilisateur
DGVPertes.Rows.Add()
For Each c As DataGridViewCell In DGVPertes.Rows(DGVPertes.RowCount - 1).Cells
If Not TypeOf c Is DataGridViewComboBoxCell Then
c.Value = ""
Else
CType(c, DataGridViewComboBoxCell).Value = 0
End If
Next
End Sub |
Donc ma question est simple : Comment faire pour garder en mémoire les valeurs des cellules ?