Enregistrer un tableau, mais aussi des lignes de text simples

Résolu
Signaler
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
-
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
-
Bonsoir la team.
Voila la question : j'arrive à enregistrer en binaire une listview via la sérialisation d'un tableau, mais je péche pour pouvoir lui y adjoindre des lignes de textes simple. (d'autres données en sommes qui ne font partis du tableau de la listview) ça me saoule grave. Je vous joins le code que j'utilise, d'avance merci bien pour votre coup de pouce. @dn
    '----------------------------------------------------------------------
    ' enregistrement du code et des lignes dans un tableau puis enregistrement via la sub REC()
    '----------------------------------------------------------------------
    Sub save()
        Dim tableau(Form1.ListView1.Items.Count - 1, Form1.ListView1.Columns.Count - 1) As String
        Dim liste As New ListViewItem

        For ligne As Integer = 0 To Form1.ListView1.Items.Count - 1
            liste = Form1.ListView1.Items(ligne)
            For Colonne As Integer = 0 To Form1.ListView1.Columns.Count - 1
                tableau(ligne, Colonne) = liste.SubItems(Colonne).Text
            Next
        Next
        rec(tableau) 'sérialisation du tableau en binaire !
    End Sub
    '----------------------------------------------------------------------
    ' fonction qui sérialise un tableau à n dimension puis l'enregistre en binaire
    '----------------------------------------------------------------------
    Sub rec(ByVal datas As Object) ' enregistre un object en binaire
        Dim myFileStream As Stream = File.Create(ma_sauvegarde)
        Dim serializer As New BinaryFormatter
        serializer.Serialize(myFileStream, datas)
        myFileStream.Close()
    End Sub
    '----------------------------------------------------------------------
    ' fonction qui lit le fichier sérialisé et qui retourne un tableau à n dimensions
    '----------------------------------------------------------------------
    Public Function lire(ByVal fichier As String) As String(,)
        Dim tableau(,) As String = {{""}, {""}} 'création d'un tableau vide
        Try
            Dim myFileStream As Stream = File.OpenRead(fichier)
            Dim deserializer As New BinaryFormatter()
            tableau = CType(deserializer.Deserialize(myFileStream), Array)
            myFileStream.Close()
            Return tableau
        Catch ex As Exception
            MsgBox("impossible à lire")
            Return tableau
        End Try
    End Function
    '----------------------------------------------------------------------


Tiens les balises ne sont pas reconnues ^_____^, zut alors.....

25 réponses

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Pour l'astuce du combobox, il faut utiliser
ComboBudget.Items.AddRange(principal.mon_compte.budgets)

plutot que le datasource et hop tout roule nickel.
@ + et merci pour ton aide.
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
Salut,

Désolé pour mon absence...

Effectivement AddRange ajoute une colllection d'éléments à une collection...

Pourquoi, la méthode Add n'a-t-elle pas marché ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
la méthode Add ? Ben il aurait falut une boucle sur principal.mon_compte.budgets.lengh-1. Là c'est en direct. Ce qui ne marche pas en revanche c'est le datasource de la combo car il se place en lecture seul, pas moyen de modifier les items de la combo.
Voila. ++
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
Re,

Oui en effet AddRange convient beaucoup mieux (c'était juste pour savoir si Add fonctionnait...).

Pour ce qui est du DataSource c'est normal, la propriété DataSource te permet de spécifier une source de données (DataTables, tableaux, Classes, Stuctures, strings etc...). Etant données que le combo ne connais pas à l'avance le type de données, il ne connais pas non plus les méthodes de l'objet pour ajouter des données dans celui-ci, donc readonly...

Tu aurais du en fait, remplacer tes tableaux par des listes (List [Of ...]), les listes sont sérialisables en principe.

Exemple :

'Pour charger le tableau dans le combo

Dim Tab As New List(Of String)
ComboBox1.Items.AddRange(Tab)

'Pour mettre à jour ta liste
Tab.Items.Clear
Tab.AddRange(ComboBox1.Items)

Tu peux par exemple remplacer ton type de propriétés (String()) par list (Of String) tout simplement et suivre le schéma ci-dessous.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Ah àa c'est une bonne astuce, car les tableaux non pas la propriété addrange et items, alors que visiblement les list oui.
Bon écoute maintenant c'est fait comme ça ^^
Mais je vais essayer de faire comme cela pour la derniére propriété de ma class compte :
L'échéancier (une ligne normal, mais qui revient tous les mois)
Merci pour les astuces et A plus pour de nouvelles aventures. @DN