1. #1
    Membre à l'essai
    Homme Profil pro
    automaticien
    Inscrit en
    novembre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : novembre 2016
    Messages : 58
    Points : 21
    Points
    21

    Par défaut Enregistrer/charger une DataGridView

    Bonjour,

    Je suis entrain de créer un logiciel en VB pour rentrer des rapports dans un tableau.
    J'aimerai savoir si il est possible d'enregistrer et de charger une DataGridView en fichier .txt ou excel sans passer par une base de donnée MYSQL car j'aimerai utiliser mon logiciel sur plusieurs ordinateurs et j'aimerai éviter de télécharger MYSQL sur chaques ordinateurs.

    Merci d'avance pour vos réponse

    Julien

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 367
    Points : 2 982
    Points
    2 982

    Par défaut

    Quel est le but de l'enregistrement? Mettre à disposition les données sur d'autres support (Excel par exemple)? Ou juste faire du stockage entre sessions de travail?

  3. #3
    Membre à l'essai
    Homme Profil pro
    automaticien
    Inscrit en
    novembre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : novembre 2016
    Messages : 58
    Points : 21
    Points
    21

    Par défaut

    Merci de ta réponse

    C'est juste pour faire du stockage

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 367
    Points : 2 982
    Points
    2 982

    Par défaut

    Dans ce cas je te conseilles d'utiliser la sérialisation XML. Malgré le terme barbare (j'ai toujours trouvé que le nom faisait peur ), c'est un moyen simple de persister un objet.

    Je te laisse suivre le lien pour plus d'informations, mais grosso modo, tu as un une liste d'objets (qui représente les données de ton datagridview) que tu stock dans un fichier XML : on appelle ça la sérialisation. Ensuite, tu pourras reconstituer tes objets depuis ce fichier : on appelle ça la désérialisation.

  5. #5
    Membre à l'essai
    Homme Profil pro
    automaticien
    Inscrit en
    novembre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : novembre 2016
    Messages : 58
    Points : 21
    Points
    21

    Par défaut

    Encore merci pour ton aide

    Je viens d'essayer la serialisation mais j'ai un message d'erreur sur ma DataGridView

    'System.Windows.Forms.DataGridView' dans l'assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' n'est pas marqué comme sérialisable.

    Mon code

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     Private Sub Ajouter_rapport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ajouter_rapport.Click
     
            Try
     
                Dim r As New Rapport_au()
                r.Daate = CStr(DateTimePicker1.Text)
                r.Nom = CStr(ComboBox1.Text)
                r.Poste = CStr(ComboBox2.Text)
                r.Rapport = CStr(RichTextBox1.Text)
                ListeRapport.Add(r)
     
                Call Afficher()
     
                ''vider les control de saisie
                ComboBox1.Text = ""
                ComboBox2.Text = ""
                RichTextBox1.Clear()
     
            Catch ex As Exception
                MsgBox("Erreur Ajout")
     
     
            End Try
        End Sub
     
        Sub Afficher()
            Try
                Dim i As Integer = 0
                DataGridView1.Rows.Clear()
                For Each s As Rapport_au In ListeRapport
                    DataGridView1.Rows.Add()
                    With DataGridView1.Rows(i)
                        .Cells(0).Value = s.Daate
                        .Cells(1).Value = s.Nom
                        .Cells(2).Value = s.Poste
                        .Cells(3).Value = s.Rapport
     
                    End With
                    i += 1
                Next
     
     
            Catch ex As Exception
                MsgBox("Erreur affichage")
            End Try
        End Sub
     
        Private Sub SupprimerRapport() Handles Supprimer_rapport.Click
     
            Try
                Dim resultat As String
                Dim nom As String = DataGridView1.Rows(DataGridView1.CurrentRow.Index).Cells(0).Value
                For Each s As Rapport_au In ListeRapport
                    If nom.Equals(s.Daate) Then
                        resultat = InputBox("Entrer Mot de passe pour supprimer")
                        If resultat = "Test" Then
                            ListeRapport.Remove(s)
                        Else
                            MsgBox("Mot de passe incorrect")
                        End If
     
                        Call Afficher()
                        Exit Sub ' quitter procedure
                    End If
                Next
     
     
            Catch ex As Exception
                MsgBox("Erreur Supression")
     
            End Try
        End Sub
     
     
        Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim fs As FileStream
            fs = New FileStream("serialisation.txt", FileMode.Append, FileAccess.Write)
            Dim pp As New BinaryFormatter
            pp.Serialize(fs, DataGridView1)
            fs.Close()
     
     
        End Sub

  6. #6
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 551
    Points : 3 188
    Points
    3 188
    Billets dans le blog
    6

    Par défaut

    Bonsoir,

    Ce sont les données que l'on serialize pas le contrôle lui même
    Un petit exemple ici : https://www.developpez.net/forums/bl...alization-xml/
    Le sujet de discussion d'origine ici : https://www.developpez.net/forums/d1...l/#post8797998

    A+

  7. #7
    Membre à l'essai
    Homme Profil pro
    automaticien
    Inscrit en
    novembre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : novembre 2016
    Messages : 58
    Points : 21
    Points
    21

    Par défaut

    Merci pour ta réponse

    Mais je n'arrive pas à sérialiser les données qui sont stockées dans "ListeRapport"
    J'ai le même message d'erreur

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 367
    Points : 2 982
    Points
    2 982

    Par défaut

    Pour pouvoir t'aider, il faudrait que l'on connaisse la définition de ListeRapport...

  9. #9
    Membre à l'essai
    Homme Profil pro
    automaticien
    Inscrit en
    novembre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : novembre 2016
    Messages : 58
    Points : 21
    Points
    21

    Par défaut

    Ci joint la définition du liste rapport

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Module Déclaration
     
        Public ListeRapport As New ArrayList
     
     
     
    End Module

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 367
    Points : 2 982
    Points
    2 982

    Par défaut

    Citation Envoyé par juliendu67117 Voir le message
    Ci joint la définition du liste rapport
    Bah voilà pourquoi ! En passant 2 min a parcourir le lien que je t'ai fournit sur la sérialisation XML (le voici, en rappel), on peut voir ceci :

    Remarque importante : il est nécessaire que la collection à sérialiser soit typée, afin que le XmlSerializer sache quel type d'objet sérialiser. Si on avait écrit le même code avec une collection non typée, ArrayList par exemple, on aurait eu une exception à la sérialisation : en effet, le XmlSerializer aurait considéré que les éléments d'une ArrayList sont de type Object, et en l'absence d'indications complémentaires, n'aurait pas su quoi faire d'un objet de type Person. On verra au chapitre III comment gérer ce type de problématique.
    Je te conseilles vivement de lire l'article. Il te permettra non seulement d'aboutir à quelque chose de fonctionnel, mais en plus tu comprendras comment ça fonctionne.

  11. #11
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 551
    Points : 3 188
    Points
    3 188
    Billets dans le blog
    6

    Par défaut

    List(Of .....) est typé
    Voici un exemple concret

    A+

  12. #12
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 551
    Points : 3 188
    Points
    3 188
    Billets dans le blog
    6

    Par défaut

    Dans un premier temps il faut travailler avec des classes (tu peux oublier les modules.... pour la serialization ) !

    Breffff......

    A titre d'exemple, prenons le cas de ton domaine :

    1- Tu créés une classe serializable nommée Rapport avec ses propriétés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Serializable> _
    Public Class Rapport
     
        Public property Date as String
        Public property Nom as String
        Public property Poste as String
     
        Public Sub New     
        End Sub
     
    End Class
    2- Une autre classe de gestion de serialization qui contient entre autre la liste de tes rapports :

    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
     
    Imports System.Xml.Serialization
    Imports System.IO
     
        <Serializable> _
        Public Class AppSettings
     
    #Region " Fields "
            <XmlIgnore()> _
            Private m_Rapports As List(Of Rapport)
    #End Region
     
    #Region " Properties "
            Public Property Rapports() As List(Of Rapport)
                Get
                    Return m_Rapports
                End Get
                Set(value As List(Of Rapport))
                    m_Rapports = value
                End Set
            End Property
    #End Region
     
    #Region " Constructor "
            Sub New()
                m_Rapports = New List(Of Rapport)
            End Sub
    #End Region
     
    #Region " Methods "
            ''' <summary>
            ''' Enregistre l'état courant de la classe dans un fichier au format XML.
            ''' </summary>
            Public Sub SaveFile()
                Dim serializer As New XmlSerializer(GetType(AppSettings))
                Dim Save As New StreamWriter(Application.StartupPath & "\ThisIsAnExample.xml")
                serializer.Serialize(Save, Me)
                Save.Close()
            End Sub
     
            ''' <summary>
            ''' Charge l'état courant du fichier XML.
            ''' </summary>
            ''' <returns>Valeur de type AppSettings</returns>
            Public Shared Function LoadFile() As AppSettings
                Dim deserializer As New XmlSerializer(GetType(AppSettings))
                Dim read As New StreamReader(Application.StartupPath & "\ThisIsAnExample.xml")
                Dim p As AppSettings = DirectCast(deserializer.Deserialize(read), AppSettings)
                read.Close()
                Return p
            End Function
     
    #End Region
     
        End Class
    3- Dans ton cas pour enregistrer les données de ton DGV :

    - Dans ton MainForm tu ajoutes un champs pour accéder à la classe de gestion de serialization :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private m_SerializationManager As AppSettings
    - Dans le constructeur de ton MainForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Sub New
        InitializeComponents
        m_SerializationManager = New AppSettings
         If Not File.Exists(Application.StartupPath & "\ThisIsAnExample.xml") Then
                m_SerializationManager.SaveFile()
            Else
                m_SerializationManager = AppSettings.LoadFile()
            End If
    End Sub New
    - Tu sauvegardes ensuite les données :

    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
     
    Private Sub Ajouter_rapport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ajouter_rapport.Click
     
            Try
     
                Dim rapport As New Rapport()
                rapport.Date = CStr(DateTimePicker1.Text)
                rapport.Nom = CStr(ComboBox1.Text)
                rapport.Poste = CStr(ComboBox2.Text)
                m_SerializationManager.Rapports.add(rapport)
                m_SerializationManager.saveFile
            Catch ex As Exception
                MsgBox("Erreur Ajout")
            End Try
        End Sub
    - Pour récupérer les rapports serializés dans le fichier xml tu parcours la List(Of Rapport) depuis l'instance m_SerializationManager :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For each Rapport in m_SerializationManager.Rapports
        'Tu charges les données dans ton DGV
    Next

    Un truc du genre qu'il faut adapter bien entendu....

  13. #13
    Membre à l'essai
    Homme Profil pro
    automaticien
    Inscrit en
    novembre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : novembre 2016
    Messages : 58
    Points : 21
    Points
    21

    Par défaut

    Merci beaucoup pour ton aide
    J'ai réussi à sauvegarder et à charger

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/08/2007, 13h11
  2. Réponses: 18
    Dernier message: 06/07/2007, 14h17
  3. Débutant : "Enregistrer" et "ouvrir" une Datagridview
    Par piepio dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/03/2007, 15h16
  4. Enregistrer, ouvrir une datagridview
    Par piepio dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/02/2007, 14h55
  5. Réponses: 3
    Dernier message: 13/02/2007, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo