簡體   English   中英

讀取.csv以獲取數據表並填充datagridview

[英]Read .csv to datatable and fill a datagridview

我有一個.csv文件,我想將其讀入datagridview(每個值讀入每一列)。 我讀了該文件並加上了塊注釋,然后看到每個值都除以“;”。

我試圖設置一個數據表,但是它不起作用。 這是我的代碼:

string FileName = @"C:\mydir\testcsv.csv";

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(FileName) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"");
conn.Open();

OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileName(FileName), conn);    
DataSet ds = new DataSet("Temp");
adapter.Fill(ds);

conn.Close();

dataGridView2.DataSource = ds;

我不知道錯誤在哪里。

您的代碼按原樣為我工作。

在查看數據集后,我只向數據源分配添加了一行,我看到其中只有一個表名為“ Table”,因此我為datagridview分配了數據成員:

        dataGridView1.DataSource = ds;
        dataGridView1.DataMember = "Table";

無論如何,如果我使用';' 分隔符,所有值都在一列中...使用','逗號分隔符可以正常工作。

看起來像這樣

表格的完整代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string FileName = @"C:\mydir\testcsv.csv";

            OleDbConnection conn = new OleDbConnection
                   ("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " +
                     Path.GetDirectoryName(FileName) +
                     "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"");

            conn.Open();

            OleDbDataAdapter adapter = new OleDbDataAdapter
                   ("SELECT * FROM " + Path.GetFileName(FileName), conn);

            DataSet ds = new DataSet("Temp");
            adapter.Fill(ds);

            conn.Close();

            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "Table";
        }
    }
}

csv文件的內容:

abc,123
def,456
ijk,789
lmn,111213

對於以分號分隔的文件,您需要在包含csv文件的文件夾中添加一個ini文件。 確切的操作方法如下:

在C#中通過OLEDB導入CSV文件時如何指定定界符

對於十進制分隔符,您必須添加

DecimalSymbol

指令到您的Jet ini文件。

請參閱MSDN中記錄的完整ini文件功能( https://msdn.microsoft.com/zh-cn/library/ms709353(v=vs.85).aspx

我在以下時間使用了很長時間:yourgrid.datasource =函數結果。

        public static DataTable CsvDb(string filename, string separatorChar)
    {
        var table = new DataTable("Filecsv");
        using (var sr = new StreamReader(filename, Encoding.Default))
        {
            string line;
            var i = 0;
            while (sr.Peek() >= 0)
            {
                try
                {
                    line = sr.ReadLine();
                    if (string.IsNullOrEmpty(line)) continue;
                    var values = line.Split(new[] { separatorChar }, StringSplitOptions.None);
                    var row = table.NewRow();
                    for (var colNum = 0; colNum < values.Length; colNum++)
                    {
                        var value = values[colNum];
                        if (i == 0)
                        {
                            table.Columns.Add(value, typeof(String));
                        }
                        else
                        { row[table.Columns[colNum]] = value; }
                    }
                    if (i != 0) table.Rows.Add(row);
                }
                catch (Exception ex)
                {
                    string cErr = ex.Message;
                    //if you need the message error
                }
                i++;
            }
        }
        return table;
    }

嘗試...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM