[英]How to import large amounts of data from CSV file to DataGridView efficiently
我有300個csv文件,每個文件包含18000行和27列。
現在,我想創建一個Windows窗體應用程序,它導入它們並在datagridview中顯示,然后再進行一些數學運算。
但是,我的表現非常低效......
通過谷歌搜索此問題后,我找到了一個解決方案“快速CSV閱讀器”。 ( http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader )
我一步一步地遵循代碼,但我的datagridview仍然是空的。
我不知道如何解決這個問題。
任何人都可以告訴我如何做或給我另一種更有效的方式來閱讀csv。
這是我的代碼......
using System.IO;
using LumenWorks.Framework.IO.Csv;
private void Form1_Load(object sender, EventArgs e)
{
ReadCsv();
}
void ReadCsv()
{
// open the file "data.csv" which is a CSV file with headers
using (CachedCsvReader csv = new
CachedCsvReader(new StreamReader("data.csv"), true))
{
// Field headers will automatically be used as column names
dataGridView1.DataSource = csv;
}
}
這是我的輸入數據: https : //dl.dropboxusercontent.com/u/28540219/20130102.csv
謝謝...
你也可以這樣做
private void ReadCsv()
{
string filePath = @"C:\..\20130102.csv";
FileStream fileStream = null;
try
{
fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
}
catch (Exception ex)
{
return;
}
DataTable table = new DataTable();
bool isColumnCreated = false;
using (StringReader reader = new StringReader(new StreamReader(fileStream, Encoding.Default).ReadToEnd()))
{
while (reader.Peek() != -1)
{
string line = reader.ReadLine();
if (line == null || line.Length == 0)
continue;
string[] values = line.Split(',');
if(!isColumnCreated)
{
for(int i=0; i < values.Count(); i++)
{
table.Columns.Add("Column" + i);
}
isColumnCreated = true;
}
DataRow row = table.NewRow();
for(int i=0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
}
}
dataGridView1.DataSource = table;
}
根據您的性能要求,此代碼可以即興創作。 這只是一個工作樣本供您參考。
我希望這會給出一些想法。
您提供的數據不包含標題(第一行是數據行)。 所以當我嘗試將csv閱讀器添加到DataSource時,我得到了一個ArgumentException(添加了相同鍵的項)。 在CachCsvReader構造函數中設置hasHeaders
參數可以解決問題,並將數據添加到DataGridView(非常快)。
using (CachedCsvReader csv = new CachedCsvReader(new StreamReader("data.csv"), false))
{
dataGridView.DataSource = csv;
}
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.