前提・実現したいこと
C#を勉強してから間もない初心者です。
CSV ファイル → A Fast CSV Reader → Dictionary → 数量、金額、利益 を 集計 → List → DataGridView 表示
学習のためDictionary → Listにしています。
DataTableやDataSetに疎いため困っています。
分類や対象商品が増えると必要に応じ
DataGridViewに行、列が増える。
C#
1using System; 2using System.Collections.Generic; 3using System.Data; 4using System.IO; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8using System.Windows.Forms; 9 10namespace Gridsyuukei 11{ 12 static class Program 13 { 14 private static Dictionary<string, Dictionary<string, Dictionary<string, int>>> 15 Add(LumenWorks.Framework.IO.Csv.CsvReader rcsv, 16 Dictionary<string, Dictionary<string, Dictionary<string, int>>> dic) 17 { 18 Dictionary<string, int> work = new Dictionary<string, int>(); 19 work.Add("数量", int.Parse(rcsv[3])); 20 work.Add("金額", int.Parse(rcsv[4])); 21 work.Add("利益", int.Parse(rcsv[5])); 22 dic[rcsv[0]].Add(rcsv[2], work); 23 return dic; 24 } 25 26 /// <summary> 27 /// アプリケーションのメイン エントリ ポイントです。 28 /// </summary> 29 [STAThread] 30 static void Main() 31 { 32 Application.EnableVisualStyles(); 33 Application.SetCompatibleTextRenderingDefault(false); 34 Application.Run(new ShopManager()); 35 36 //csvファイルのパス 37 string csvpath = "C: \Users\nbs\Desktop\クロス集計2号\import.csv"; 38 39 40 //csvファイル読み込み 41 using (LumenWorks.Framework.IO.Csv.CsvReader rcsv = 42 new LumenWorks.Framework.IO.Csv.CsvReader(new StreamReader(csvpath, Encoding.GetEncoding("shift_jis")), true)) 43 44 { 45 //格納用Dictionary 46 Dictionary<string, Dictionary<string, Dictionary<string, int>>> dic = 47 new Dictionary<string, Dictionary<string, Dictionary<string, int>>>(); 48 49 50 //集計処理 51 //値があれば計算する 52 //なければ参照しくる 53 while (rcsv.ReadNextRecord()) 54 { 55 if (dic.ContainsKey(rcsv[0])) 56 { 57 if (dic[rcsv[0]].ContainsKey(rcsv[2])) 58 { 59 dic[rcsv[0]][rcsv[2]]["数量"] += int.Parse(rcsv[3]); 60 dic[rcsv[0]][rcsv[2]]["金額"] += int.Parse(rcsv[4]); 61 dic[rcsv[0]][rcsv[2]]["利益"] += int.Parse(rcsv[5]); 62 } 63 else 64 { 65 dic = Add(rcsv, dic); 66 } 67 68 } 69 else 70 { 71 dic[rcsv[0]] = new Dictionary<string, Dictionary<string, int>>(); 72 dic = Add(rcsv, dic); 73 } 74 75 } 76 77 //キーをListに変換する 78 List<string> keysList = new List<string>(dic.Keys);//ウィンドウ等 79 80 foreach (string key in keysList) 81 { 82 //ここから処理をどうしたらいいかわからない 83 } 84 } 85 } 86 } 87 } 88} 89 90 91 92 93 94 95 96
補足情報(FW/ツールのバージョンなど)
Windows, VisualStudio2017.15.7.5, Windows Forms
ソースコードはMarkdown書式でフォーマットしてくださいー

質問する際は、常識として、何を作っているかと(Windows Forms? WPF? ASP.NET Web Forms? その他?)、あなたの開発環境(OS, .NET, Visual Studio のバージョンなど)を書くようにしましょう。

表題は dataGrid、本文は girdView となってますが、どっちなんですか? あと、VB.NET じゃないんだから、大文字小文字を区別して正しく書くようにしてください(dataGrid ⇒ DataGrid、gridView ⇒ GridView、dictionary ⇒ Dictionary)。
書式や書き方に問題がありました。 すみませんでした。 少し情報を足してみました。

表題も直してください。

表題のDaraGridを直すつもりはない?
直しましたすみません
回答でも何でもない提案なのですが、こういうデータ構造を取らなければなりませんか?正直な話、三重のDictionaryは扱いにくいと思います。商品と分類のペアを主キーとして、数量・金額・利益(利益が単にかけ算なら持たなくていい)を3カラム持つような、2次元データにしたほうがいいと思います。
