我有以下代码从用户指定的CSV文件中提取数据。 CSV文件没有任何标题,并且有四列数据。我正在尝试将此数据导入dataGridView数据源,但会获得意外结果。每次,它占据第一行并使其成为标题列。我尝试在开头插入一行(注释掉文本),但它只会将行添加到数据源,但不会将其视为标题。我不太担心有标题,但我希望我的数据不会“省略”第一行,因为它将它视为标题。
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 :(得分: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是错的,只是提出了几种替代方法。
答案 1 :(得分: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