我有一个.csv文件,我想将它读入datagridview(每个列中的每个值)。 我用块注释读取这个文件,我看到每个值除以&#34 ;;"
我尝试设置数据表,但它无法正常工作。这是我的代码:
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;
我不明白错误在哪里。
答案 0 :(得分:1)
您的代码原样适用于我。
在查看数据集内部后,我刚刚在数据源分配中添加了一行,我看到只有一个表在里面,名称为“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文件。这里有如何描述:
How to specify the delimiter when importing CSV files via OLEDB in C#
对于小数分隔符号,您必须添加
DecimalSymbol
指向您的Jet ini文件。
查看MSDN(https://msdn.microsoft.com/en-us/library/ms709353(v=vs.85).aspx)
中记录的完整ini文件功能答案 1 :(得分:1)
我在很久很久之后使用这个函数:yourgrid.datasource = function result。
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;
}
...试