2015-11-03 54 views
3

我寫了下面的代碼從.csv文件中讀取數據從Windows窗體應用程序CSV文件中顯示的數據:閱讀和使用C#

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

namespace CSVRead 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private void buttonRead_Click(object sender, EventArgs e) 
     { 
      DataTable dataTable = new DataTable(); 
      dataTable.Columns.Add("Username"); 
      dataTable.Columns.Add("Password"); 
      dataTable.Columns.Add("MachineID"); 
      string filePath = textBox1.Text; 
      StreamReader streamReader = new StreamReader(filePath); 
      string[] totalData = new string[File.ReadAllLines(filePath).Length]; 
      totalData = streamReader.ReadLine().Split(','); 
      while (!streamReader.EndOfStream) 
      { 
       totalData = streamReader.ReadLine().Split(','); 
       dataTable.Rows.Add(totalData[0], totalData[1], totalData[2]); 
      } 
      dataGridView1.DataSource = dataTable; 
     } 

     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

     } 
    } 
} 

這裏是我的CSV文件數據(readCSV.csv):

Username, Password, MachineID 
abc, abc, 123 
jkl, jkl, 789 
rst, rst, 456 

我有一個的dataGridViewWindows窗體應用程序(見下文,因爲我還沒有積累足夠的聲譽張貼圖片圖像鏈接),並希望顯示在這個從CSV文件中的數據網格視圖。此代碼不會引發任何錯誤/警告,但它不會執行它應該的方式。單擊「查找」按鈕時,數據不會顯示在dataGridView中。我正在使用Visual Studio 2013專業版。

WinFormApp

我傻:哎呀!上面的代碼工作得很好......我在遠程機器上寫我的代碼,並將我的文件存儲在本地計算機上。此外,按鈕點擊事件的名稱錯誤輸入。

注意:答案已被標記爲接受,因爲它的邏輯也起作用。在我的問題上面寫的代碼也是一個絕對好的工作

+0

你檢查上的DataGridView的AutoGenerateColumns? https://msdn.microsoft.com/es-es/library/system.windows.forms.datagridview.autogeneratecolumns(v=vs.110).aspx –

+0

到目前爲止,我還沒有檢查它 –

+0

'File.ReadAllLines' will將文件讀入一個枚舉類型,所以你可以像'var contents = File.ReallAllLines(path)'這樣做,然後擺脫流讀取器,然後循環遍歷'contents'並在那裏分割線。 –

回答

3

下面是工作示例來解決您的問題。但在開始之前,您應該在讀取CVS文件或excel文件時知道一些事情。對於Excel文件總是第一行是列名,所以你不需要將列添加到數據表手動

try 
      { 
       // your code here 
    string CSVFilePathName = @"path and file name"; 
       string[] Lines = File.ReadAllLines(CSVFilePathName); 
       string[] Fields; 
       Fields = Lines[0].Split(new char[] { ',' }); 
       int Cols = Fields.GetLength(0); 
       DataTable dt = new DataTable(); 
       //1st row must be column names; force lower case to ensure matching later on. 
       for (int i = 0; i < Cols; i++) 
        dt.Columns.Add(Fields[i].ToLower(), typeof(string)); 
       DataRow Row; 
       for (int i = 1; i < Lines.GetLength(0); i++) 
       { 
        Fields = Lines[i].Split(new char[] { ',' }); 
        Row = dt.NewRow(); 
        for (int f = 0; f < Cols; f++) 
         Row[f] = Fields[f]; 
        dt.Rows.Add(Row); 
       } 
       dataGridClients.DataSource = dt; 
} 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error is " + ex.ToString()); 
       throw; 
      } 
+0

這對dataGridView沒有任何影響(雖然沒有收到任何錯誤消息或警告) –

+0

是否將datagrid名稱更改爲按照您的DG名稱。我測試了這段代碼,結果很好。顯示錯誤添加嘗試捕獲代碼和異常 –

+0

我的數據網格名稱與屬性窗口中顯示的名稱相同。你能幫我試試catch代碼嗎? –

0

首先檢查DataGridView中的AutoGenerateColumns。接下來檢查你的數據表是否正在填寫。

檢查這個例子,可以幫助你很多: Faster way of reading csv to grid

+0

我是否需要將autogenerateColumns設置爲false?我是C#和VS新手,所以我需要一些有用的易於理解的指針 –

+0

邏輯或代碼中沒有任何錯誤...我已經更新了我是多麼愚蠢。感謝您的努力 –