Sauvegarder et récupérer les données d'un DataGridView

Résolu
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - 2 avril 2022 à 13:16
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 4 avril 2022 à 17:59
Bonjour le Forum,

Je souhaite remplir mon DataGridview en récupèrent les données enregistrer dans un fichier text, actuellement seul le code qui sauvegarde les données fonctionne.
 Dim writer As TextWriter = New StreamWriter("C:\Users\All Users\ABC.text")
 
            For i As Integer = 0 To DataGridView1.Rows.Count - 2 Step +1
 
                For j As Integer = 0 To DataGridView1.Columns.Count - 1 Step +1
 
                    writer.Write(vbTab & DataGridView1.Rows(i).Cells(j).Value.ToString() & vbTab & "|")
 
                Next
 
                writer.WriteLine("")
                writer.WriteLine("---------------------------------------------")
 
            Next
            writer.Close()
            MessageBox.Show("Data Exported")


et je bloque avec le code qui récupère les données pour remplir le DataGridView
 Dim lines() As String
            Dim vals() As String
 
            ' get lines from the text file
            lines = File.ReadAllLines("C:\Users\All Users\ABC.text")
 
            ' For i As Integer = 0 To lines.Length - 1 Step +1  ' lines
            For i As Integer = 0 To lines.Length - 2 Step +1  ' lines
                vals = lines(i).ToString().Split(CChar(("|")))
                Dim row(vals.Length - 1) As String
 
                For j As Integer = 0 To vals.Length - 1 Step +1  ' columns
 
                    row(j) = vals(j).Trim()
 
                Next j
 
                Table.Rows.Add(row)
 
            Next i

Je sollicite votre aide afin de corriger le code qui récupère les données, l'erreur est sur Table.Rows.Add(row)
Merci à vous.

4 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
2 avril 2022 à 16:30
1
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
3 avril 2022 à 14:17
Bonjour cs_Le Pivert,

Merci pour le lien, les exemples dans le code mon permis de mieux comprendre le problème.

Grace à cette nouvelle approche j'ai complètement changé le code de sauvegarde et lecture des données.
0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
3 avril 2022 à 14:18
Encore merci
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
3 avril 2022 à 15:25
Bonjour

Je me permets d’attirer ton attention sur le fait que l’approche du pivert est peut-être nouvelle pour toi, mais elle correspond à l’esprit de VB6.

VB.Net est un langage objet et à été pensé pour que les contrôles soient utilisés non pas comme les sources de données, mais seulement comme interface entre l’utilisateur et ces sources de données.
L’idée est donc d’écrire des objets qui correspondent à nos données et ensuite de binder des collections de ces objets aux contrôles.

Un exemple ici https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource la source de données est écrite en dur dans le code mais la (dé)serialization en csv est très simple.

D’ailleurs c’est demandé suffisamment souvent pour que je me décide un jour à compléter le tuto
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
4 avril 2022 à 17:59
Bon le bug de mise à jour des sources que j'avais cru corrigé ne l'est en fait pas.
Donc à ajouter dans le source VB cité au début du tuto
  • un bouton nommé butExportCSV
  • un bouton nommé butImportCSV

ce code

        Private Sub butExportCSV_Click(sender As Object, e As EventArgs) Handles butExportCSV.Click
            Dim lignes = New List(Of String)() 'la liste des lignes qui seront exportées

            lignes.Add("Nom;Prénom;DateNaissance") 'la ligne d'entête

            For Each p As Personne In mesPersonnes
                lignes.Add(String.Format("{0};{1};{2}", p.Nom, p.Prenom, p.Naissance)) 'une ligne par personne
            Next

            File.WriteAllLines("LesPersonnes.csv", lignes)

            Process.Start("LesPersonnes.csv")
        End Sub

        Private Sub butImportCSV_Click(sender As Object, e As EventArgs) Handles butImportCSV.Click
            Dim lignes As List(Of String) = File.ReadAllLines("LesPersonnes.csv").Skip(1).ToList()  'on importe chaque ligne, sauf la première

            mesPersonnes.Clear()  'on vide la source de données actuelles
            For Each l As String In lignes
                'Pour chaque ligne du fichier on ajoute une personnes
                Dim datas As String() = l.Split(";"c)
                mesPersonnes.Add(New Personne With {
                    .Nom = datas(0),
                    .Prenom = datas(1),
                    .Naissance = datas(2).ToDate()
                    })
            Next

            'on force le binding à tout ré-afficher
            personneBindingSource.ResetBindings(false)
        End Sub
0
Rejoignez-nous