DataGridView в CSV-файл - PullRequest
       17

DataGridView в CSV-файл

5 голосов
/ 14 июля 2011

У меня есть VB 2010 Express Project, в котором есть DataGridView, который я пытаюсь записать в файл CSV.

У меня все записи работают.Но это медленно.Медленно = возможно 30 секунд для 6000 строк в 8 столбцах.

Вот мой код:

    Private Sub btnExportData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportData.Click
    Dim StrExport As String = ""
    For Each C As DataGridViewColumn In DataGridView1.Columns
        StrExport &= """" & C.HeaderText & ""","
    Next
    StrExport = StrExport.Substring(0, StrExport.Length - 1)
    StrExport &= Environment.NewLine

    For Each R As DataGridViewRow In DataGridView1.Rows
        For Each C As DataGridViewCell In R.Cells
            If Not C.Value Is Nothing Then
                StrExport &= """" & C.Value.ToString & ""","
            Else
                StrExport &= """" & "" & ""","
            End If
        Next
        StrExport = StrExport.Substring(0, StrExport.Length - 1)
        StrExport &= Environment.NewLine
    Next

    Dim tw As IO.TextWriter = New IO.StreamWriter("C:\Test1.CSV")
    tw.Write(StrExport)
    tw.Close()
End Sub

Кто-нибудь знает, что я могу сделать, чтобы ускорить его?

спасибо

Ответы [ 2 ]

13 голосов
/ 15 июля 2011

Разве вам не нравится, когда вы часами ищете, затем задаете вопрос, и через несколько минут вы сами найдете ответ?

Это помогло мне:

Dim headers = (From header As DataGridViewColumn In DataGridView1.Columns.Cast(Of DataGridViewColumn)() _
              Select header.HeaderText).ToArray
Dim rows = From row As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow)() _
           Where Not row.IsNewRow _
           Select Array.ConvertAll(row.Cells.Cast(Of DataGridViewCell).ToArray, Function(c) If(c.Value IsNot Nothing, c.Value.ToString, ""))
Using sw As New IO.StreamWriter("csv.txt")
    sw.WriteLine(String.Join(",", headers))
    For Each r In rows
        sw.WriteLine(String.Join(",", r))
    Next
End Using
Process.Start("csv.txt")
1 голос
/ 16 мая 2016

<code>
Private Sub cmdExport_Click(sender As Object, e As EventArgs) Handles cmdExport.Click
'This way increases performance without casting
        Dim filePath As String = "OverrideViewer.csv"
        Dim delimeter As String = ","
        Dim sb As New StringBuilder
        For i As Integer = 0 To dgDataView.Rows.Count - 1
            Dim array As String() = New String(dgDataView.Columns.Count - 1) {}
            If i.Equals(0) Then
                For j As Integer = 0 To dgDataView.Columns.Count - 1
                    array(j) = dgDataView.Columns(j).HeaderText
                Next
                sb.AppendLine(String.Join(delimeter, array))
            End If
            For j As Integer = 0 To dgDataView.Columns.Count - 1
                If Not dgDataView.Rows(i).IsNewRow Then
                    array(j) = dgDataView(j, i).Value.ToString
                End If
            Next
            If Not dgDataView.Rows(i).IsNewRow Then
                sb.AppendLine(String.Join(delimeter, array))
            End If
        Next
        File.WriteAllText(filePath, sb.ToString)
'Opens the file immediately after writing
        Process.Start(filePath)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...