2016-09-11 720 views
1

我有一个.csv文件,我想将其读入一个datagridview(每个值放入每一列)。 我用block note读取这个文件,我发现每个值除以“;”将.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; 

我不明白错误在哪里。

+0

是否有任何异常情况发生?或只是网格空? –

+0

@MichalHainc Grid empty – Marci

+0

好吧,用你的一段代码创建一个应用程序......只需一秒钟。 –

回答

1

您的代码为我工作,因为它是。

我刚才添加一行到数据源分配的数据集中寻找后,我看到只是一个表是内部名称为“表”,所以我分配在DataGridView的数据成员:

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

无论如何,如果我用过的 ';'分隔符,所有的值都在一列...用','逗号分隔符它工作正常。

It looks like this

形式的完整代码:CSV文件的

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"; 
     } 
    } 
} 

内容:

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

对于分号分隔的文件,你需要添加一个ini文件的文件夹中包含csv文件。如何做到这一点正是在这里描述:

How to specify the delimiter when importing CSV files via OLEDB in C#

对于小数点分隔符号,你必须在

DecimalSymbol 

指令添加到您的喷气ini文件。

请参阅MSDN(https://msdn.microsoft.com/en-us/library/ms709353(v=vs.85).aspx)记载

+0

您可以发布您的工作码?所以我可以复制和粘贴。谢谢:) – Marci

+0

我可以,但它们都一样:) –

+0

它不工作。我的价值观不仅仅在我的csv文件中。另外的符号是“;”。可能是这个问题? :) – Marci

1

全部ini文件功能我用这个功能通过很长一段时间后: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; 
    } 

的Try ...

+0

很少有时间我正在使用C#所以...我怎样才能在我的datagridview中添加这个?谢谢:) – Marci

+0

Datatable oDt = CsvDb(“youfilecsv”,“;”); datagridview.Datasource = oDt; oDt.Dispose; – Infoservice

+0

谢谢,我会尝试 – Marci

相关问题