質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

2143閲覧

Dictionary → List → DataGridViewで表示させたい。

ppsspp

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/08/06 00:53

編集2022/01/12 10:55

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShikaTech

2018/08/06 01:23

ソースコードはMarkdown書式でフォーマットしてくださいー
退会済みユーザー

退会済みユーザー

2018/08/06 01:42

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

退会済みユーザー

2018/08/06 01:47

表題は dataGrid、本文は girdView となってますが、どっちなんですか? あと、VB.NET じゃないんだから、大文字小文字を区別して正しく書くようにしてください(dataGrid ⇒ DataGrid、gridView ⇒ GridView、dictionary ⇒ Dictionary)。
ppsspp

2018/08/06 04:06

書式や書き方に問題がありました。 すみませんでした。 少し情報を足してみました。
退会済みユーザー

退会済みユーザー

2018/08/06 04:28

表題も直してください。
退会済みユーザー

退会済みユーザー

2018/08/06 07:59

表題のDaraGridを直すつもりはない?
ppsspp

2018/08/06 08:23

直しましたすみません
papinianus

2018/08/06 15:05

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

回答1

0

dictionaryの内容をListにしてgridviewに表示させたいです。

CSV ファイル ⇒ A Fast CSV Reader ⇒ Dictionary ⇒ List ⇒ GridView(DataGridView の間違い?)としているようですが、間の Dictionary ⇒ List を使う意味は何なのですか?

勉強のためとか、何らかの理由でどうしても Dictionary ⇒ List を使いたいということならともかく、CSV ファイルの内容を GridView に表示したいということが目的(間は手段に過ぎないので何でもよい)なら、

CSV ファイル ⇒ A Fast CSV Reader ⇒ DataTable ⇒ GridView

としてはいかがですか?

その例は、以下の記事を見てください。

CSV パーサー
http://surferonwww.info/BlogEngine/post/2010/10/28/CSV-parser.aspx

上の記事では表示するのに ASP.NET Web Forms の GridView を使っていますが、Windows Forms の DataGridView を使っても可能です。

投稿2018/08/06 02:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問