0

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

2 回答 2

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 是错误的,只是提出了几种替代方法。

于 2013-05-10T03:42:51.350 回答
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

于 2013-05-10T03:50:31.137 回答