| ■No55508 (todo さん) に返信
> 2010/12/03(Fri) 19:03:36 編集(投稿者)
> 2010/12/03(Fri) 18:56:46 編集(投稿者)
>
> DataTableに名前がないカラムを5個追加する代わりに、CSVファイルのヘッダ行(1行目)を読み込んで名前付きのカラムをDataTableに追加する。
> 2行以降(データ行)はもともとの方法で読み込む。
> それだけです。
>
> DataRow row = dataset_sam.Tables["sample"].NewRow();
> 何でこの行がループの外で出ちゃうのですか?
返事が遅くなってしまい申し訳ありません。まだ解決していないのでお付き合いしていただきたく思います。
ご指摘された点を直してみたのですが、for文の部分で2行目のデータを取得するところまでは大丈夫なのですが、それ以降のデータを取得する段階で[インデックスが配列の境界外です]と例外が発生します。
以下のソースコードの問題点とその解決策をご教授していただけたら幸いに存じます。
DataSet dataset_sam = new DataSet();
dataset_sam.Tables.Add("sample");
dataset_sam.Tables["sample"].Columns.Add("");
dataset_sam.Tables["sample"].Columns.Add("");
dataset_sam.Tables["sample"].Columns.Add("");
dataset_sam.Tables["sample"].Columns.Add("");
dataset_sam.Tables["sample"].Columns.Add("");
System.IO.StreamReader StreamReader = new System.IO.StreamReader(@"C:\Users\KOMATSU\Desktop\csv.csv", System.Text.Encoding.GetEncoding(932));
//DataSetの作成
string[] stringBuffer = StreamReader.ReadLine().Split(',');
foreach (string s in stringBuffer)
{
dataset_sam.Tables["sample"].Columns.Add(s);
}
while (StreamReader.Peek() != -1)
{
string[] st = StreamReader.ReadLine().Split(',');
DataRow row = dataset_sam.Tables["sample"].NewRow();
for (int counter = 1; counter < row.ItemArray.Length; counter++)
{
row[counter] = st[counter];
}
dataset_sam.Tables["sample"].Rows.Add(row);
}
StreamReader.Close();
dataGridView1.DataSource = dataset_sam;
dataGridView1.DataMember = "sample"; |