使用第一行作为标题导入无标题CSV到数据网格视图



我有以下代码,它从用户指定的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();

您是否尝试过显式地为表创建列,然后用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是错误的,只是提出了几种替代方法。

使用列名插入记录

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

最新更新