質問編集履歴

2

質問の整理整頓及び、コードとイメージの記載。困っている点の記述。

2022/05/25 06:13

投稿

YU-N
YU-N

スコア4

test CHANGED
File without changes
test CHANGED
@@ -50,7 +50,116 @@
50
50
  フレームワークは.NET Framework4.7.2
51
51
  になります。
52
52
 
53
+ <05.25追記>
54
+ 回答者様方のご親切で、当初の質問の意図そのものと少しずれ始めているにも関わらず、会話をさせて頂けております為、質問を整理させてください。
55
+
56
+ ・インプットとなるcsvファイルは複数ファイルです。
57
+ ・アウトプットしたいcsvファイルは1ファイル(DataGridViewに表示されているイメ―ジの通り)
58
+ ・DataGridViewに表示したデータに対して、編集する場合があり、編集されたデータをアウトプットしたいです。
59
+ ・DataGridViewの表示イメージを下記に示します。
60
+
61
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-25/f05c8701-888a-4c19-b276-997005559204.png)
62
+
63
+ ```C#
64
+ using System;
65
+ using System.Collections.Generic;
66
+ using System.Collections;
67
+ using System.Data;
68
+ using System.Linq;
69
+ using System.Windows.Forms;
70
+
71
+ namespace csvtest
72
+ {
73
+ public partial class Form1 : Form
74
+ {
75
+ public Form1()
76
+ {
77
+ InitializeComponent();
78
+ }
79
+
80
+ private void Form1_Load(object sender, EventArgs e)
81
+ {
82
+
83
+ //データテーブルを作成
84
+ DataTable dt = new DataTable("sample");
85
+
86
+
87
+ //コレクションを作成
88
+ var dict_col = new List<Dictionary<string, string>>();
89
+
90
+
91
+ //csvデータを用意(csvの要素が配列になっているとして)
92
+ string[] csvdata = { "場所", "東京", "取引先", "株式会社A", "商品", "食品" };
93
+ string[] csvdata2 = { "実績", "あり", "商品", "文具", "取引先", "株式会社B", "場所", "大阪", "実店舗", "あり" };
53
94
 
54
95
 
55
96
 
97
+ //csvのリストを作成
98
+ List<string[]> csvall = new List<string[]>();
56
99
 
100
+ //リストにcsvデータを追加
101
+ csvall.Add(csvdata);
102
+ csvall.Add(csvdata2);
103
+
104
+
105
+
106
+ //dictionary型に入れ込む
107
+
108
+ foreach (var a in csvall)
109
+ {
110
+ var csv_dict = new Dictionary<string, string>();
111
+
112
+ for (int i = 0; i < a.Length; i += 2)
113
+ {
114
+ csv_dict.Add(a[i], a[i + 1]);
115
+ }
116
+
117
+ dict_col.Add(csv_dict);
118
+
119
+ }
120
+
121
+ //datatableのカラムにcsv_dictからキーを取り出して一通り入れる
122
+
123
+ foreach (var b in dict_col)
124
+ {
125
+ List<string> keysList = b.Keys.ToList(); //keyの一覧リストを作成して
126
+ foreach (string key in keysList) //データテーブルのカラムに追加していく
127
+ {
128
+
129
+ //データテーブルのカラムに既に存在しないか(重複)を
130
+ //確認。重複していた場合追加しない
131
+ if (0 <= Array.IndexOf(dt.Columns.list,key) //※1うまくいっていません
132
+
133
+
134
+ {
135
+ dt.Columns.Add(key);
136
+
137
+ }
138
+ }
139
+ }
140
+
141
+ //未実装:データテーブルにValueを入れていく
142
+
143
+
144
+ dataGridView1.DataSource = dt;
145
+
146
+
147
+ }
148
+ }
149
+ }
150
+
151
+ ```
152
+
153
+ 現状困っている点
154
+ ・※1 のところですが
155
+ dt.Columns.Addで例外処理(すでにkeyが存在している)が発生してしまうので
156
+ https://dobon.net/vb/dotnet/programing/arraycontains.html
157
+ こちらを参考に
158
+ 重複していないときのみ、keyを追加するようにしたいのですが
159
+ using System.Data;
160
+ を記述しているのですが
161
+ DataColumnCollection
162
+ に対して、.Listがインテリセンスされません。
163
+
164
+
165
+

1

目的と開発環境の追記

2022/05/22 09:04

投稿

YU-N
YU-N

スコア4

test CHANGED
File without changes
test CHANGED
@@ -37,6 +37,20 @@
37
37
 
38
38
  宜しくお願い致します。
39
39
 
40
+ <追記>
41
+ ご指摘を頂きましたので、目的を追記します。
42
+ 質問の意図は私が思いついた範囲の手段であり
43
+ 目的は上記にあるような形態のcsvファイルが複数供給され
44
+ それをDataGridViewに表示し、DataGridViewの編集結果を保存したい
45
+ といったことになります。
46
+
47
+ VisualStudio2022
48
+ 言語はC#
49
+ WindowsForms
50
+ フレームワークは.NET Framework4.7.2
51
+ になります。
40
52
 
41
53
 
42
54
 
55
+
56
+