質問内容
C#で、csvファイルを読み込みDataTableとして取得し、そこから特定の列を抽出しDataGridViewへ出力するアプリを作成しました。
そこから列を抽出する際、指定した列の値によって抽出する列を行ごとに変更したいのですが、この部分が上手くいきません。解決法がありましたら回答宜しくお願いします。
読み込むcsvファイル(サンプル)と該当ソースコード
csv
1F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15, 2============================== 310,05,01,11,03,01,80,10,09, , , , , , , 410,10,01,03,01,02,95,10,05, , , , , , , 510,15,02,02,00,03,04,02,00,15,15,00, , , , 610,20,02,02,06,02,10,01,03,16,20,04, , , , 710,25,03,01,03,01,04,00,01,05,00,01,18,20,02, 810,30,03,15,02,02,07,02,02,31,02,02,24,25,01,
一番上の行はカラム名となります。
このcsvファイルを読み込み、下記ソースコードで特定の列を抽出しDataGridViewへ出力します。
C#
1DataTable dt = new DataTable(); 2 3private void button_Click(object sender, EventArgs e) //DataTableから指定した列を取得 4 { 5 //一行ずつ読み込み 6 foreach(DataRow dr in dt.Rows) 7 { 8 DataView dview = new DataView(dt); 9 //抽出する列を指定 10 dt = dview.ToTable(false, new string[5] { "F1", "F2", "F3", "F4", "F5" }); 11 12 Console.WriteLine(dr); 13 } 14 //DataGridViewに出力 15 dataGridView1.DataSource = dt; 16 }
この抽出する列を、カラム名【F3】の値によって個別に変えていきたいというのをやりたいです。
今回の場合、カラム名【F3】が「01」の行は【F1~F5】を、「02」の行は【F1~F5、F7、F8】、「03」の行は【F1~F5、F7、F8、F10、F11】をそれぞれ個別に抽出したいです。
試したこと
当初の考えとしては、foreachループ文で一行ずつ出力するときにswitch文で抽出する列を分岐させるといった方法で行けると思ったのですが、これではうまくいきませんでした。
C#
1DataTable dt = new DataTable(); 2 3private void button_Click(object sender, EventArgs e) //DataTableから指定した列を取得 4 { 5 var stringArr = dt.Rows[0].ItemArray.Select(x => x.ToString()).ToArray(); 6 7 //一行ずつ読み込み 8 foreach(DataRow dr in dt.Rows) 9 { 10 switch(dr["F3"].ToString()) //F3の数値で分岐 11 { 12 case "01": 13 dt = dtview.ToTable(false, new string[5] { "F1", "F2", "F3", "F4", "F5" }); 14 break; 15 case "02": 16 dt = dtview.ToTable(false, new string[7] { "F1", "F2", "F3", "F4", "F5", "F7", "F8" }); 17 break; 18 case "03": 19 dt = dtview.ToTable(false, new string[9] { "F1", "F2", "F3", "F4", "F5", "F7", "F8", "F10", "F11" }); 20 break; 21 } 22 Console.WriteLine(dr); 23 } 24 dataGridView1.DataSource = dt; 25 }
補足情報
・Visual Studio 2022
・Windows フォームアプリケーション(.Net Framework) C#




回答2件
あなたの回答
tips
プレビュー