0

ユーザーが指定したCSVファイルからデータを取得する次のコードがあります。CSV ファイルにはヘッダーがなく、4 列のデータがあります。このデータを 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

列名を使用してレコードを挿入する

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 に答える
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 に答える