2016-09-11 652 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

相關問題