none
sauvegarde datagrid RRS feed

  • Question

  • bonjour

    je me trouve devant une erreur quand je teste mon code enregistrer

    j'obtiens "la référence d'objet n’est pas définie à une instance objet"

    sur la ligne d'écriture j'ai deja teste ce code sur d'autre programme pouvez vous me dire pourquoi voici mon code

    Imports System.IO
    
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            If DataGridView1.Rows.Count > 0 Then
                Dim save As New SaveFileDialog
                save.Filter = "Fichier Texte|*.txt"
                save.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
                If save.ShowDialog = Windows.Forms.DialogResult.OK Then
                    Using writer As New StreamWriter(save.FileName)
                        Dim rowcount As Integer = DataGridView1.Rows.Count
                        Dim i As Integer = 0
                        Do While (i < (rowcount - 1))
                            writer.WriteLine((DataGridView1.Rows(i).Cells(0).Value.ToString + ("" & vbTab _
                                            + (DataGridView1.Rows(i).Cells(1).Value.ToString + ("" & vbTab + DataGridView1.Rows(i).Cells(2).Value.ToString)))))
                            i = (i + 1)
                        Loop
                        writer.Close()
                    End Using
                    MessageBox.Show("Fichier Sauvegarder", "Sauvegarder!")
                Else : Exit Sub
                End If
            End If
        End Sub

    dans le cas d'un datagridview comprenant 25 colonne est il possible de faire l’enregistrement de la ligne par une boucle pour alleger l'écriture de la ligne

    merci de m'aider



    jeudi 3 décembre 2015 11:06

Réponses

  • Bonjour,

    Voici la solution a ton problème :

    If DataGridView1.Rows.Count > 0 Then
                Dim save As New SaveFileDialog
                save.Filter = "Fichier Texte|*.txt"
                save.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
                If save.ShowDialog = Windows.Forms.DialogResult.OK Then
                    Using writer As New StreamWriter(save.FileName)
                        For i = 0 To DataGridView1.Rows.Count - 1
                            writer.WriteLine(Me.DataGridView1.Rows.Item(i).Cells.Item(0).Value + ("" & vbTab + Me.DataGridView1.Rows.Item(i).Cells.Item(1).Value))
                        Next i
                        writer.Close()
                        MessageBox.Show("Fichier Sauvegarder", "Sauvegarder!")
                    End Using
                End If
            End If
        End Sub
    cordialement

    • Modifié zorro591 jeudi 3 décembre 2015 14:08
    • Marqué comme réponse SIMONGEORGES vendredi 4 décembre 2015 06:42
    jeudi 3 décembre 2015 14:08

Toutes les réponses

  • L'objet non défini ne saute pas aux yeux.

    Pour la lecture de N colonnes, pourquoi ne pas aller chercher un String avec tous les rangs et toutes les cellules, comme ça un seul appel au fichier:

    dim strLigneASauver as string
    strLigneASauver = RowAString(DataGridView1,vbtab)
    
    ''' <summary>
    ''' Une fonction qui prend un DataGridView et renvois un String 
    ''' contenant chaque cellule séparée par un delimiteur et un saut de ligne
        ''' pour chaque rang.
        ''' </summary>
        ''' <param name="monDGV">Le Datagridview.</param>
        ''' <param name="delimiter">Le délimiteur entre les cellule.</param>
        ''' <returns></returns>
        Public Function RowAString(ByRef monDGV As DataGridView, ByVal delimiter As String) As String
            Dim sb As New StringBuilder()
    
            RowAString = ""
            For Each row As DataGridViewRow In monDGV.Rows
                For Each cell As DataGridViewCell In row.Cells
                    sb.Append(cell.Value)
                    sb.Append(delimiter)
                Next
                sb.Remove(sb.Length - 1, 1) 'Un sparadra pour enlever le dernier delimiter de la string....
                sb.AppendLine() 'On pourrait ajouter un newline aussi
            Next
    
            Return sb.ToString
        End Function


    Cyrille Precetti

    jeudi 3 décembre 2015 12:37
  • Bonjour,

    Voici la solution a ton problème :

    If DataGridView1.Rows.Count > 0 Then
                Dim save As New SaveFileDialog
                save.Filter = "Fichier Texte|*.txt"
                save.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
                If save.ShowDialog = Windows.Forms.DialogResult.OK Then
                    Using writer As New StreamWriter(save.FileName)
                        For i = 0 To DataGridView1.Rows.Count - 1
                            writer.WriteLine(Me.DataGridView1.Rows.Item(i).Cells.Item(0).Value + ("" & vbTab + Me.DataGridView1.Rows.Item(i).Cells.Item(1).Value))
                        Next i
                        writer.Close()
                        MessageBox.Show("Fichier Sauvegarder", "Sauvegarder!")
                    End Using
                End If
            End If
        End Sub
    cordialement

    • Modifié zorro591 jeudi 3 décembre 2015 14:08
    • Marqué comme réponse SIMONGEORGES vendredi 4 décembre 2015 06:42
    jeudi 3 décembre 2015 14:08
  • un très très grand merci je vais tester cela
    vendredi 4 décembre 2015 06:42