How do you read a CSV file and display the results in a grid in Visual Basic 2010?

前端 未结 7 1455
死守一世寂寞
死守一世寂寞 2020-12-29 07:56

How do you read a CSV file and display the results in a grid in Visual Basic 2010? This sounds so simple but I still can\'t find the answer to it after googling for a while.

相关标签:
7条回答
  • 2020-12-29 08:35

    This seems a little more elegant

    'populate DT from .csv file
    
     Dim items = (From line In IO.File.ReadAllLines("C:YourData.csv") _
     Select Array.ConvertAll(line.Split(","c), Function(v) _ 
     v.ToString.TrimStart(""" ".ToCharArray).TrimEnd(""" ".ToCharArray))).ToArray
    
    Dim Your_DT As New DataTable
    For x As Integer = 0 To items(0).GetUpperBound(0)
    Your_DT.Columns.Add()
    Next
    
    For Each a In items
    Dim dr As DataRow = Your_DT.NewRow
    dr.ItemArray = a
    Your_DT.Rows.Add(dr)
    Next
    
    Your_DataGrid.DataSource = Your_DT           
    
    0 讨论(0)
  • 2020-12-29 08:39

    Consider this snippet of code. Modify as you see fit, or to fit your requirements. You'll need to have Imports statements for System.IO and System.Data.OleDb.

    Dim fi As New FileInfo("c:\foo.csv")
    Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fi.DirectoryName
    
    Dim conn As New OleDbConnection(connectionString)
    conn.Open()
    
    'the SELECT statement is important here, 
    'and requires some formatting to pull dates and deal with headers with spaces.
    Dim cmdSelect As New OleDbCommand("SELECT Foo, Bar, FORMAT(""SomeDate"",'YYYY/MM/DD') AS SomeDate, ""SOME MULTI WORD COL"", FROM " & fi.Name, conn)
    
    Dim adapter1 As New OleDbDataAdapter
    adapter1.SelectCommand = cmdSelect
    
    Dim ds As New DataSet
    adapter1.Fill(ds, "DATA")
    
    myDataGridView.DataSource = ds.Tables(0).DefaultView 
    myDataGridView.DataBind
    conn.Close()
    
    0 讨论(0)
  • 2020-12-29 08:40

    This is how you can read data from .csv file using OLEDB provider.

      If OpenFileDialog1.ShowDialog(Me) = DialogResult.OK Then
            Try
                Dim fi As New FileInfo(OpenFileDialog1.FileName)
                Dim sConnectionStringz As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fi.DirectoryName
                Dim objConn As New OleDbConnection(sConnectionStringz)
                objConn.Open()
                'DataGridView1.TabIndex = 1
                Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & fi.Name, objConn)
                Dim objAdapter1 As New OleDbDataAdapter
                objAdapter1.SelectCommand = objCmdSelect
                Dim objDataset1 As New DataSet
                objAdapter1.Fill(objDataset1)
    
                '--objAdapter1.Update(objDataset1) '--updating
                DataGridView1.DataSource = objDataset1.Tables(0).DefaultView
            Catch ex as Exception
               MsgBox("Error: " + ex.Message)
            Finally
                objConn.Close()
            End Try
        End If
    
    0 讨论(0)
  • 2020-12-29 08:42
    For Each line As String In System.IO.File.ReadAllLines("D:\abc.csv")
        DataGridView1.Rows.Add(line.Split(","))
    Next
    
    0 讨论(0)
  • 2020-12-29 08:45

    Use the TextFieldParser class built into the .Net framework.

    Here's some code copied from an MSDN forum post by Paul Clement. It converts the CSV into a new in-memory DataTable and then binds the DataGridView to the DataTable

        Dim TextFileReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\Documents and Settings\...\My Documents\My Database\Text\SemiColonDelimited.txt")
    
        TextFileReader.TextFieldType = FileIO.FieldType.Delimited
        TextFileReader.SetDelimiters(";")
    
        Dim TextFileTable As DataTable = Nothing
    
        Dim Column As DataColumn
        Dim Row As DataRow
        Dim UpperBound As Int32
        Dim ColumnCount As Int32
        Dim CurrentRow As String()
    
        While Not TextFileReader.EndOfData
            Try
                CurrentRow = TextFileReader.ReadFields()
                If Not CurrentRow Is Nothing Then
                    ''# Check if DataTable has been created
                    If TextFileTable Is Nothing Then
                        TextFileTable = New DataTable("TextFileTable")
                        ''# Get number of columns
                        UpperBound = CurrentRow.GetUpperBound(0)
                        ''# Create new DataTable
                        For ColumnCount = 0 To UpperBound
                            Column = New DataColumn()
                            Column.DataType = System.Type.GetType("System.String")
                            Column.ColumnName = "Column" & ColumnCount
                            Column.Caption = "Column" & ColumnCount
                            Column.ReadOnly = True
                            Column.Unique = False
                            TextFileTable.Columns.Add(Column)
                        Next
                    End If
                    Row = TextFileTable.NewRow
                    For ColumnCount = 0 To UpperBound
                        Row("Column" & ColumnCount) = CurrentRow(ColumnCount).ToString
                    Next
                    TextFileTable.Rows.Add(Row)
                End If
            Catch ex As _
            Microsoft.VisualBasic.FileIO.MalformedLineException
                MsgBox("Line " & ex.Message & _
                "is not valid and will be skipped.")
            End Try
        End While
        TextFileReader.Dispose()
        frmMain.DataGrid1.DataSource = TextFileTable
    
    0 讨论(0)
  • 2020-12-29 08:46

    Consider this CodeProject article/project: LINQ TO CSV.

    It will enable you to create a custom class that is shaped like your .csv file's columns. You'd then consume the CSV and bind to your DataGridView.

    Dim cc As new CsvContext()
    Dim inputFileDescription As New CsvFileDescription() With { _
        .SeparatorChar = ","C, _
        .FirstLineHasColumnNames = True _
    }
    
    Dim products As IEnumerable(Of Product) = _
         cc.Read(Of Product)("products.csv", inputFileDescription)
    
    ' query from CSV, load into a new class of your own   
    Dim productsByName = From p In products
        Select New CustomDisplayClass With _
           {.Name = p.Name, .SomeDate = p.SomeDate, .Price = p.Price}, _        
        Order By p.Name
    
    
    myDataGridView1.DataSource = products
    myDataGridView1.DataBind()
    
    0 讨论(0)
提交回复
热议问题