将CSV加载到datagrid vb.net,但不会填充所有列

时间:2017-11-14 15:45:48

标签: vb.net csv

我正在尝试将CS​​V加载到数据表中,目前使用它的代码只会加载前两列数据。但是有些行有7列。我不认为这是用正确的CSV语法格式化的,但我相信有足够的信息来提取我需要的东西。 我希望将所有信息都放入数据网格中,然后将其视为打开Excel或类似程序,以便我可以访问各个单元格以获取所需信息。 拉入CSV的示例代码:

Private Sub ReadCSV_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ABInfo = GetCsvData("C:\epds\WIP\", "test2.csv")
    Bind_Grid_ABInfo(ABInfo)
End Sub

Public Sub Bind_Grid_ABInfo(ByVal DT As DataTable)
    Try
        DGABInfo.DataSource = DT
        DGABInfo.Refresh()
    Catch ex As Exception
    End Try
End Sub

Public Function GetCsvData(ByVal strFolderPath As String, ByVal strFileName As String) As DataTable
    Try

        Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFolderPath & ";Extended Properties=""text;HDR=yes;FMT=Delimited"";"
        Dim conn As New OleDbConnection(strConnString)
        Try
            conn.Open()
            Dim cmd As New OleDbCommand("SELECT *  FROM [" & strFileName & "]", conn) '("SELECT * FROM [" & strFileName & "]", conn)
            Dim da As New OleDbDataAdapter()

            da.SelectCommand = cmd
            Dim ds As New DataSet()

            da.Fill(ds)
            da.Dispose()
            Return ds.Tables(0)
        Catch
            Return Nothing
        Finally
            conn.Close()
        End Try
    Catch ex As Exception
    End Try
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.Close()
    Me.Dispose()
End Sub

这里是示例csv ---我不知道如何保持格式化

Process,Quote
File Name,project_10_-_freeform_cover
Project Name,Project 10 - Freeform Cover
Customer Id,1234567

Dealer,dealer
Dealer Name,name
Dealer Telephone,1234567890
Dealer Mobile,
Dealer Email,e@mail.com
Dealer Address,address

Distributor Name,dist
Distributor,dist
Distributor Address,address
Distributor Telephone,1234567890
Distributor Email,e@mail.com

Customer Name,name 
Customer Telephone,1234567890
Customer Address,address

Description,L shape pool with slide
Comments,

Measurement Unit,inches

Cover Type,Safety

Pool Shape,Freeform

Cover Color,Blue
Cover Material,Standard Mesh
Grid Size,3 x 3
Replacement,No

Deck Type,Concrete
Deck Width,Full 3' of decking around all sides of the pool.
Coping Type,Concrete
Coping Width,12.0,1' 0"
Perimeter Padding,No

Warnings,None.

A-B Length,401.0,33' 5"

Feature,AB
Type,
Removable,No
Number of points,2
Line Length,401.0,33' 5"
Point,A,B,X,Y,Label,Type
1,,,0.0,0.0,A,Position
2,,,401.0,0.0,B,Position

Feature,Pool
Number of points,25
Calculated Length,467.1,38' 11.1"
Calculated Width,348.4,29' 0.4"
Calculated Perimeter,1386.7,115' 6.7"
Point,A,B,X,Y,Label,Type
1,375.0,61.0,371.2,53.2,,A-B
2,357.0,66.0,354.0,46.3,,A-B
3,190.0,221.0,184.6,44.9,,A-B
4,79.0,341.0,63.3,47.3,,A-B
5,52.0,400.0,4.4,51.8,,A-B
6,73.0,412.0,-4.5,72.9,,A-B
7,146.0,430.0,-3.5,146.0,,A-B
8,165.0,438.0,-4.8,164.9,,A-B
9,191.0,449.0,-5.4,190.9,,A-B
10,210.0,457.0,-4.9,209.9,,A-B
11,341.0,530.0,-4.8,341.0,,A-B
12,356.0,517.0,25.2,355.1,,A-B
13,379.0,531.0,28.0,378.0,,A-B
14,396.0,542.0,29.7,394.9,,A-B
15,401.0,520.0,63.8,395.9,,A-B
16,408.0,497.0,100.1,395.5,,A-B
17,390.0,481.0,101.7,376.5,,A-B
18,371.0,464.0,103.7,356.2,,A-B
19,372.0,442.0,129.5,348.7,,A-B
20,318.0,391.0,136.0,287.5,,A-B
21,278.0,354.0,140.6,239.8,,A-B
22,305.0,314.0,193.6,235.7,,A-B
23,436.0,234.0,369.3,231.8,,A-B
24,408.0,159.0,376.5,157.1,,A-B
25,397.0,130.0,375.9,127.6,,A-B

Feature,Slide
Type,Obstacle
Removable,No
Number of points,4
Line Length,64.0,5' 4.0"
Point,A,B,X,Y,Label,Type
1,146.0,430.0,-3.5,146.0,,A-B
2,165.0,438.0,-4.8,164.9,,A-B
3,191.0,449.0,-5.4,190.9,,A-B
4,210.0,457.0,-4.9,209.9,,A-B

Cross Pool Measurement,Cross Measurement 1
Measured Length,381.0,31' 9"
Calculated Length,381.4,31' 9.4"
Point,A,B,X,Y,Label,Type,Feature,Point
1,165.0,438.0,-4.8,164.9,8,Existing,Pool,8
2,408.0,159.0,376.5,157.1,24,Existing,Pool,24

Cross Pool Measurement,Cross Measurement 2
Measured Length,347.0,28' 11"
Calculated Length,348.6,29' 0.6"
Point,A,B,X,Y,Label,Type,Feature,Point
1,401.0,520.0,63.8,395.9,15,Existing,Pool,15
2,79.0,341.0,63.3,47.3,4,Existing,Pool,4

heres the result

1 个答案:

答案 0 :(得分:1)

如果您提前知道要导入的格式,您执行,那么您可以执行此类操作。根据您当前的数据,10列将足以托管数据文件。因此,我只需将每个"数据列"在GridviewColumn中。

抱歉这是c#,而不是vb.net

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;

namespace CsvToDataGridView_47289838
{

    public partial class Form1 : Form
    {
        DataGridView dgv = new DataGridView();
        BindingList<dgvEntry> dgvdata = new BindingList<dgvEntry>();
        string filePath = @"M:\StackOverflowQuestionsAndAnswers\CsvToDataGridView_47289838\SampleData.txt";
        public Form1()
        {
            InitializeComponent();
            initDGV();
            addData();
        }

        private void addData()
        {
            using (System.IO.StreamReader sr = new System.IO.StreamReader(filePath))
            {
                string currentLine = string.Empty;
                while ((currentLine = sr.ReadLine()) != null)
                {
                    dgvEntry entry = new CsvToDataGridView_47289838.dgvEntry();
                    List<string> splitted = currentLine.Split(',').ToList();
                    for (int i = 0; i < splitted.Count; i++)
                    {
                        switch (i)
                        {
                            case 0:
                                entry.col1 = splitted[i];
                                break;
                            case 1:
                                entry.col2 = splitted[i];
                                break;
                            case 2:
                                entry.col3 = splitted[i];
                                break;
                            case 3:
                                entry.col4 = splitted[i];
                                break;
                            case 4:
                                entry.col5 = splitted[i];
                                break;
                            case 5:
                                entry.col6 = splitted[i];
                                break;
                            case 6:
                                entry.col7 = splitted[i];
                                break;
                            case 7:
                                entry.col8 = splitted[i];
                                break;
                            case 8:
                                entry.col9 = splitted[i];
                                break;
                            case 9:
                                entry.col10 = splitted[i];
                                break;
                            default:
                                break;
                        }
                    }
                    dgvdata.Add(entry);
                }
            }
        }

        private void initDGV()
        {
            dgv.Dock = DockStyle.Fill;
            this.Controls.Add(dgv);
            dgv.DataSource = dgvdata;
        }
    }



    public class dgvEntry
    {
        public string col1 { get; set; }
        public string col2 { get; set; }
        public string col3 { get; set; }
        public string col4 { get; set; }
        public string col5 { get; set; }
        public string col6 { get; set; }
        public string col7 { get; set; }
        public string col8 { get; set; }
        public string col9 { get; set; }
        public string col10 { get; set; }
    }
}