[英]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文件。 確切的操作方法如下:
對於十進制分隔符,您必須添加
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.