実現したいこと
独学でC#の勉強をしています。
for文やforeachを使用してDataTableに入っている値を取得しようとしています。
DataTableに入っているデータを順番にすべて取り出しながら3次元配列に入れたいです。
発生している問題
現在、foreach文で列ごとに取得し、配列に代入するところまで(該当のソースコード)は分ったのですが、列名を指定せず、列をまたいでも処理を継続できるように改良したいと考えています。
理想としては
配列の中身が、{3.2,田中} , {2.4,山田} , {3.5,斎藤} , {5.6,田中} , {5.7,山田} , {4.9,斎藤} , {3.9,田中}…のようになることです。
(列aの一番上から一番下まで行ったら列b、列c…と繰り返す)
拙い文章で申し訳ありませんがお力を貸してくださると幸いです。
よろしくお願いいたします。
DataTableの中身
見づらくてすみません。例ですがこのようなものです。
id | 氏名 | 列名a | 列名b | 列名c | 列名d ・・・
1 | 田中 | 3.2 | 5.6 | 3.9 | 2.1
2 | 山田 | 2.4 | 5.7 | 3.4 | 2.3
3 | 斎藤 | 3.5 | 4.9 | 2.9 | 3.0
・
・
・
該当のコード (1列のみ)
C#
1 2foreach (DataRow dr1 in dt.Rows) 3{ 4 test[i, 0] = dr1["列名a"]; 5 test[i, 1] = dr1["氏名"]; 6 //Console.WriteLine("氏名," + test[i, 1]); 7 //Console.WriteLine("列名aの値," + dr1["列名a"]); 8 i++; 9} 10
試してみたこと
「該当のソースコード」のforeachを2重にすれば良いのかと考えましたが上手くできませんでした。
補足情報
visual studio2017を使用しています。
###解決後
初心者のため、かなり汚く効率の悪いコードになっているとは思いますが、自分用の記録、同じ疑問を持つ人用に残しておきます。
c#
1 foreach (DataColumn retu in dt.Columns) //列ごと この書き方だとid列、氏名列も対象になってる。 2 { 3 //列名が「id」「氏名」のところを回避する。 4 if (3 <= ct2 && ct2 <= 896) 5 { 6 foreach (DataRow dr1 in dt.Rows) //行ごと 7 { 8 //retuName = retu.ColumnName; //String型で列名取得できる 9 test[j, i, 0] = dr1[retu.ColumnName]; 10 test[j, i, 1] = dr1["氏名"]; 11 12 //チェック用 13 //Console.WriteLine("{0},{1}",j,i); 14 //Console.WriteLine("氏名," + test[j, i, 1]);//氏名,山田 とか 15 //Console.WriteLine(retu.ColumnName + "," + dr1[retu.ColumnName]);//列名B,5.7 とか 16 //Console.WriteLine(); 17 i++; 18 } 19 j++; 20 i = 0; 21 22 } 23 ct2++; 24}
回答4件
あなたの回答
tips
プレビュー