質問編集履歴
2
質問の整理整頓及び、コードとイメージの記載。困っている点の記述。
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
|
+

|
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
目的と開発環境の追記
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
|
+
|