none
enregistrer et ouvrir datagridview RRS feed

  • Discussion générale

  • je souhaiterais l'enregistrement se face automatique.

    Quand vous aller sur la page d'accueil tu click sur le bouton huile par exemple le tableau s'ouvre.

    tu rentre des donnée dans le datagridview (huiles) qui doit s'enregistrer automatiquement,  car il y a d'autre datagridview dans des form séparer (aquarelle, gouaches, .......ect) qui auront leur tableau.

    une fois les données rentrer tu ferme et tu revient plus tard pour ajouter d'autres données comment faire pour qu'il ouvre automatiquement le tableau avec les données précédemment rentrées.

    Je ne trouve pas la soluce la je bueugue

    merci d'avance de votre aide!!!

    Explications : http://www.youtube.com/watch?v=GW2FrzM-iN4&feature=youtu.be


    DUBARRE




    samedi 24 novembre 2012 17:25

Toutes les réponses

  • Un petit prototype avec StreamReader / StreamWriter: sauvegarde lors de la fermeture de la fenêtre contenant le DataGridView (tu peux gérer ça avec un bouton si tu préfères), lecture du fichier lors du chargement de cette feuille :

    Imports System.IO
    
    Public Class Form1
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim s() As String
            Dim lg As String
    
            With Me.DataGridView1
                ' Vide la grille
                .Rows.Clear()
                Using sr As New StreamReader("c:\Huiles.txt")
                    Do
                        lg = sr.ReadLine()
                        s = Split(lg, ",")
                        Me.DataGridView1.Rows.Add(s)
                    Loop Until lg Is Nothing
                End Using
            End With
        End Sub
    
        Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            Dim s As String, Lig As Integer
    
            With Me.DataGridView1
                If .Rows.Count > 0 Then
                    Using sw As New StreamWriter("c:\Huiles.txt")
                        For Lig = 0 To .Rows.Count - 1
                            If Not .Rows(Lig).Cells(0).Value Is Nothing Then
                                s = .Rows(Lig).Cells(0).Value & "," & _
                                    .Rows(Lig).Cells(1).Value & "," & _
                                    .Rows(Lig).Cells(2).Value & "," & _
                                    .Rows(Lig).Cells(3).Value & "," & _
                                    .Rows(Lig).Cells(4).Value
                                sw.WriteLine(s)
                            End If
                        Next
                    End Using
                End If
            End With
        End Sub
    
     End Class

    On pourrait envisager d'ajouter un champ en début de ligne :

    • "H" -> Huile
    • "G" -> Gouache
    • "A" -> Aquarelle

    afin de n'avoir qu'un seul fichier. Il suffirait alors, lors de la lecture de tester la valeur de ce champ pour savoir à quel DataGridView la ligne appartient


    Cordialement, Jacques


    • Modifié Jacques93 samedi 24 novembre 2012 18:25
    samedi 24 novembre 2012 18:22
  • merci de ta patience , mais j'essaye de le le mettre dans un bouton un pour charger.

    mais l'autre jcomprent pas dslé jve pas etre lourd jessaye de comprendre 

    le plus simple sa serait pas d'avoir un bouton pour enregistrer et l'autre pour charger 

    merci encore


    DUBARRE

    samedi 24 novembre 2012 19:10
  • Version avec deux boutons sur chaque feuille : Huile, Aquarelle, Gouache...

    • cmdOuvre
    • cmdEnregistre
    Public Class Form1
        Private Sub cmdOuvre_Click(sender As System.Object, e As System.EventArgs) Handles cmdOuvre.Click
            Ouvre_GridView("Huiles.txt", Me.DataGridView1)
        End Sub
    
        Private Sub cmdEnregistre_Click(sender As System.Object, e As System.EventArgs) Handles cmdEnregistre.Click
            Enregistre_GridView("Huiles.txt", Me.DataGridView1)
        End Sub

    Pour la grille Aquarelle, tu remplaces juste 'Huiles.txt" par "Aquarelles.txt"

    Et partant du principe que les DataGridView sont similaires (5 colonnes), tu déplaces le code 'Ouverture/Enregistrement' dans un module à part créé par Projet-> Ajouter un module, avec le code suivant :

    Imports System.IO
    
    Module Module1
        ' Remplit le DataGridView
        Public Sub Ouvre_GridView(ByRef fName As String, ByRef Grid As DataGridView)
            Dim s() As String
            Dim lg As String
    
            With Grid
                ' Vide la grille
                .Rows.Clear()
                If File.Exists(GetFullName(fName)) Then
                    Using sr As New StreamReader(GetFullName(fName))
                        Do
                            lg = sr.ReadLine()
                            If Len(lg) > 0 Then
                                s = Split(lg, ",")
                                .Rows.Add(s)
                            End If
                        Loop Until lg Is Nothing
                    End Using
                End If
            End With
        End Sub
    
        ' Sauvegarde le DataGridView
        Public Sub Enregistre_GridView(ByRef fName As String, ByRef Grid As DataGridView)
            Dim s As String, Lig As Integer
    
            With Grid
                If .Rows.Count > 0 Then
                    Using sw As New StreamWriter(GetFullName(fName))
                        For Lig = 0 To .Rows.Count - 1
                            If Not .Rows(Lig).Cells(0).Value Is Nothing Then
                                s = .Rows(Lig).Cells(0).Value & "," & _
                                    .Rows(Lig).Cells(1).Value & "," & _
                                    .Rows(Lig).Cells(2).Value & "," & _
                                    .Rows(Lig).Cells(3).Value & "," & _
                                    .Rows(Lig).Cells(4).Value
                                sw.WriteLine(s)
                            End If
                        Next
                    End Using
                End If
            End With
        End Sub
    
        ' Retourne le nom complet avec chemin dand "Mes Documents"
        Public Function GetFullName(ByRef fName As String) As String
            Dim Dir As String
    
            Dir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            GetFullName = Dir & "\" & fName
        End Function
    End Module
    

    Les fichiers sont sauvegardés dans "Mes Documents"

    Je dépose une démo de projet avec "Huile" et "Aquarelle" sur : http://cjoint.com/?0KzkmUSn2h3

    Tu devrais rapidement voir que les bouton "Ouvre" et "Enregistre" ne sont pas indispensables. Il est plus judicieux à mon sens d'utiliser les évènement Form_Load et Form_Closing, cela évitera des manip et surtout des oublis à l'utilisateur.

    Bon dimanche


    Cordialement, Jacques

    dimanche 25 novembre 2012 09:16
  • bonjours 

    sa marche nickel merci beaucoup 

    juste deux truc 

    1°) Dir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments.GESTION_1.2.2

    g voulu ajouter un rangement des enregistrement dans le dossier du logiciel mais il me le met en erreur pourkoi stp

    2°) peut on mettre une form qui indique si on a ajouter ou supprimer des données si on veut enregistrer sa obligera la personne a le faire ou pas, comme sa pas d'oublie d'enregistrements 

    merci d'avance 


    DUBARRE


    dimanche 25 novembre 2012 17:33
  • Bonjour,

    Pour le point n°1, "Environment.SpecialFolder" est une énumération des répertoires d'une installation standard de Windows dont tu peux trouver la liste complète ici : SpecialFolder , et dont MyDocuments est un des membres. Tu ne peux ni modifier, ni ajouter des éléments à cette énumération.

    Pour travailler sur un sous dossier de ce répertoire, modifie la fonction GetFullName de Module1.bas :

        ' Retourne le nom complet avec chemin dans "Mes Documents"
        Public Function GetFullName(ByRef fName As String) As String
            Dim Dir As String
    
            Dir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            GetFullName = Dir & "\GESTION_1.2.2\" & fName
        End Function

    Pour le point n°2, au risque de paraitre insistant essaie de te passer des boutons (pas la peine de les supprimer pour l'instant) et d'appeler les procédures aux ouvertures /  fermeture des feuilles, pour Huiles par exemple :

    Public Class frmHuile
        Private Sub cmdOuvre_Click(sender As System.Object, e As System.EventArgs) Handles cmdOuvre.Click
            'Ouvre_GridView("Huiles.txt", Me.DataGridView1)
        End Sub
    
        Private Sub cmdEnregistre_Click(sender As System.Object, e As System.EventArgs) Handles cmdEnregistre.Click
            'Enregistre_GridView("Huiles.txt", Me.DataGridView1)
        End Sub
    
        Private Sub cmdAdd_Click(sender As System.Object, e As System.EventArgs) Handles cmdAdd.Click
            frmHuileA.ShowDialog()
        End Sub
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Ouvre_GridView("Huiles.txt", Me.DataGridView1)
        End Sub
    
        Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            Enregistre_GridView("Huiles.txt", Me.DataGridView1)
        End Sub
    
    End Class
    

    et voit si ça te convient. Sinon tu seras amené à gérer des flags pour savoir si il y a eu modification d'une grille, si l'enregistrement a déjà été fait ou pas, etc ...


    Cordialement, Jacques

    lundi 26 novembre 2012 06:12