2013-05-10 41 views
0

我有以下代碼從用戶指定的CSV文件中提取數據。 CSV文件沒有任何標題,並有四列數據。我試圖將這些數據導入到dataGridView數據源,但得到意想不到的結果。每一次,它都會佔用第一行,並使其成爲標題列。我嘗試在開始處插入一行(註釋掉文本),但它只會將行添加到數據源,但不會將其視爲標題。我並不擔心有頭文件,但希望我的數據不會「忽略」第一行,因爲它將其視爲頭文件。使用第一行作爲標題將無標題CSV導入數據網格視圖

string sql_select; 
string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + Path.GetDirectoryName(odfDeficit.FileName).Trim() + ";Extensions=asc,csv,tab,txt"; 
DataSet ds = new DataSet(); 
OdbcConnection conn = new OdbcConnection(strConnString.Trim()); 
sql_select = "select * from [" + Path.GetFileName(odfDeficit.FileName).Trim() + "]"; 
OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn); 
obj_oledb_da.Fill(ds, "csv"); 

//DataRow dr; 
//dr = ds.Tables["csv"].NewRow(); 
//dr[0] = "First Name"; 
//dr[1] = "Last Name"; 
//dr[2] = "Last Four of SSN"; 
//dr[3] = "Deficit Amount"; 
//ds.Tables["csv"].Rows.InsertAt(dr, 0); 
dataGridView1.DataSource = ds.Tables["csv"]; 
conn.Close(); 

回答

0

您是否嘗試過顯式創建表格的列,然後使用CSV文件加載表格?

DataTable csvTable = new DataTable(); 

csvTable.Columns.Add("FirstName", typeof(String)); 
csvTable.Columns.Add("LastName", typeof(String)); 
csvTable.Columns.Add("LastFourOfSSN", typeof(String)); 
csvTable.Columns.Add("DeficitAmount", typeof(String)); 

obj_oledb_da.Fill(csvTable); 

dataGridView1.DataSource = csvTable; 

我不能說肯定這會工作,但它是值得一試。

另外,出於好奇,爲什麼要使用Odbc?你可以使用OleDb或者甚至是Microsoft.VisualBasic.FileIO.TextFieldParser類。我不是說Odbc是錯誤的,只是提出了幾種替代方法。

+0

當我試圖使用'Microsoft.VisualBasic.FileIO;'它給了一個錯誤說,它不能被發現。我以前從未使用過Visual C#,但有一天可以完成任務並創建一個ETL工具。吮吸我。但是,我告訴他們,他們需要在CSV中包含標題行,這些標題行是他們給我的。這是它工作的唯一途徑。我喜歡你的方法最好。不知道它是否會起作用,但似乎足夠合理。 – kobaltz 2013-05-10 12:36:17

0

插入記錄通過使用列名

DataRow dr = ds.Tables["csv"].NewRow(); 
dr.ItemArray = ds.Tables["csv"].Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray(); 
ds.Tables["csv"].Rows.InsertAt(dr,0); 

或者你可以嘗試A Fast CSV Reader

相關問題