VB.Net: Открыть файл CSV в Datagridview - PullRequest
0 голосов
/ 12 сентября 2018

У меня проблемы с загрузкой данных из файла CSV в Datagridview. Я получаю следующую ошибку при попытке прочитать файл: "Входной массив длиннее, чем количество столбцов в этой таблице"

Dim SR As StreamReader = New StreamReader(My.Computer.FileSystem.SpecialDirectories.Programs & "/PURTB/Data/" & TextBox1.Text & ComboBox3.Text & ".csv")
    Dim line As String = SR.ReadLine()
    Dim strArray As String() = line.Split(","c)
    Dim dt As DataTable = New DataTable()
    Dim row As DataRow

    For Each s As String In strArray
        dt.Columns.Add(New DataColumn())
    Next

    Do
        line = SR.ReadLine
        If Not line = String.Empty Then
            row = dt.NewRow()
            row.ItemArray = line.Split(",")
            dt.Rows.Add(row)
        Else
            Exit Do
        End If
    Loop

Файл, который я использую, выглядит примерно так: Файл CSV

Обновление: возможно, проблема связана с кодом экспорта.

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(My.Computer.FileSystem.SpecialDirectories.Programs & "/PURTB/Data/" & TextBox1.Text & ComboBox3.Text & ".csv")
    tw.Write(StrExport)
    tw.Close()

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

При использовании DataTable вам нужно определить столбцы ... в противном случае вы получите ошибку, указанную в OP: « Входной массив длиннее, чем количество столбцов в этой таблице » - приведенный выше код работает, если добавить следующее ...

    dt.Columns.Add("Column1", GetType(String))
    dt.Columns.Add("Column2", GetType(String))
    dt.Columns.Add("Column3", GetType(String))
    dt.Columns.Add("Column4", GetType(String))
    dt.Columns.Add("Column5", GetType(String))

    etc.
0 голосов
/ 12 сентября 2018

Однажды мне нужно было импортировать файл CSV в мой DataGridView, и я сделал это, как показано в коде ниже (он все еще используется многими пользователями и работает без ошибок):

Dim dt As DataTable = New DataTable 'you will not need this if your dgv has a datatable as datasource
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim fName As String = ""
    OpenFileDialog1.InitialDirectory = "D:\TestFile"
    OpenFileDialog1.Filter = "CSV files(*.csv)|*.csv"
    OpenFileDialog1.RestoreDirectory = True
    If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
        fName = OpenFileDialog1.FileName
    End If

    Dim TextLine As String = ""
    Dim SplitLine() As String

    If System.IO.File.Exists(fName) = True Then
        Dim objReader As New System.IO.StreamReader(fName, Encoding.ASCII)
        Dim index As Integer = 0
        Do While objReader.Peek() <> -1
            If index > 0 Then
                TextLine = objReader.ReadLine()
                SplitLine = Split(TextLine, ",")
                dt.Rows.Add(SplitLine)
            Else
                TextLine = objReader.ReadLine()
            End If
            index = index + 1
        Loop
        DataGridView1.DataSource = dt
    Else
        MsgBox("File Does Not Exist")
    End If
End Sub

Надеюсь, что это работает. ^^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...