回答編集履歴

4

追記3

2020/03/19 02:19

投稿

退会済みユーザー
test CHANGED
@@ -147,3 +147,133 @@
147
147
 
148
148
 
149
149
  ただ、こういうやり方より、データーソース構成ウイザードを使って作成することをお勧めします。今回のようなことで悩むことはなくなります。開発工数も保守工数も激減するはずです。
150
+
151
+
152
+
153
+ **【追記3】**
154
+
155
+
156
+
157
+ 質問に対する 2020/03/19 10:56 の私のコメントで、
158
+
159
+
160
+
161
+ > 画像を貼っていただいたのですが、依然として何をしたのか具体的なことが分かりません。らちがあきそうもないので、想像をふくらませて回答欄に追記します。
162
+
163
+
164
+
165
+ と書きましたが、それを以下に書きます。
166
+
167
+
168
+
169
+ 質問者さんが言う「あらかじめデザインの方で列を作成」というのは、Form にツールボックスから DataGridView をドラッグ&ドロップして、以下の画像のようにデザイン画面で[列の追加]を行っただけで、DataPropertyName の設定はしてないのでは?
170
+
171
+
172
+
173
+ ![イメージ説明](52151455016dc7d6828296a9e36d09c9.jpeg)
174
+
175
+
176
+
177
+ DataPropertyName の設定をしてないので、DataGridView に DataTable をバインドした際、上の操作で追加した列の右に DataTable の列が新たに追加されるという結果になったと思います。
178
+
179
+
180
+
181
+ 解決策は[列の編集]画面で、DataPropertyName を設定することです。例えば、SELECT クエリが SELECT Id, Name, Qty, UnitPrice, Qty * UnitPrice AS Amount FROM list となっている場合、以下の画像のよう「番号」列には Id を設定します。
182
+
183
+
184
+
185
+ ![イメージ説明](57046a8cebec18a7663f5319c267bd21.jpeg)
186
+
187
+
188
+
189
+ そうすれば、以下のコードで、
190
+
191
+
192
+
193
+ ```
194
+
195
+ using System.Data;
196
+
197
+ using System.Windows.Forms;
198
+
199
+ using MySql.Data.MySqlClient;
200
+
201
+
202
+
203
+ namespace WindowsFormsMySQL
204
+
205
+ {
206
+
207
+ public partial class Form3 : Form
208
+
209
+ {
210
+
211
+ protected BindingSource bindingSource1;
212
+
213
+
214
+
215
+ public Form3()
216
+
217
+ {
218
+
219
+ InitializeComponent();
220
+
221
+
222
+
223
+ this.bindingSource1 = new BindingSource();
224
+
225
+ this.dataGridView1.DataSource = this.bindingSource1;
226
+
227
+ this.Controls.Add(this.dataGridView1);
228
+
229
+ this.bindingSource1.DataSource = CreateDataTable();
230
+
231
+ }
232
+
233
+
234
+
235
+ private DataTable CreateDataTable()
236
+
237
+ {
238
+
239
+ DataTable table = new DataTable();
240
+
241
+
242
+
243
+ string connString = "server=localhost;user id=root;password=*****;database=test";
244
+
245
+ string query = "SELECT Id, Name, Qty, UnitPrice, Qty * UnitPrice AS Amount FROM list";
246
+
247
+ using (MySqlConnection connection = new MySqlConnection(connString))
248
+
249
+ {
250
+
251
+ using (MySqlCommand command = new MySqlCommand(query, connection))
252
+
253
+ {
254
+
255
+ MySqlDataAdapter adapter = new MySqlDataAdapter(command);
256
+
257
+ adapter.Fill(table);
258
+
259
+ }
260
+
261
+ }
262
+
263
+ return table;
264
+
265
+ }
266
+
267
+ }
268
+
269
+ }
270
+
271
+ ```
272
+
273
+
274
+
275
+ 結果は以下のようになります。
276
+
277
+
278
+
279
+ ![イメージ説明](2a3ad3e5c9b9aec25af3b0d735878c59.jpeg)

3

訂正

2020/03/19 02:19

投稿

退会済みユーザー
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- string connString = "server=localhost;user id=root;password=rkt81141;database=test";
113
+ string connString = "server=localhost;user id=root;password=********;database=test";
114
114
 
115
115
  string query = "SELECT Id AS 番号, Name AS 名前, Qty AS 数量, UnitPrice AS 単価, Qty * UnitPrice AS 合価 FROM list";
116
116
 

2

追記

2020/03/17 06:37

投稿

退会済みユーザー
test CHANGED
@@ -27,3 +27,123 @@
27
27
  SELECT data1 AS 番号,data2 AS 乗り物,data3 AS アイコン FROM tbl_master
28
28
 
29
29
  ```
30
+
31
+
32
+
33
+ **【追記2】**
34
+
35
+
36
+
37
+ 上のレスのやり方で期待通りの結果になることは確認しました。
38
+
39
+
40
+
41
+ 検証に使ったコードと結果の画像をアップしておきます。
42
+
43
+
44
+
45
+ ```
46
+
47
+ using System.Data;
48
+
49
+ using System.Windows.Forms;
50
+
51
+ using MySql.Data.MySqlClient;
52
+
53
+
54
+
55
+ namespace WindowsFormsMySQL
56
+
57
+ {
58
+
59
+ public partial class Form1 : Form
60
+
61
+ {
62
+
63
+ protected DataGridView dataGridView1;
64
+
65
+ protected BindingSource bindingSource1;
66
+
67
+
68
+
69
+ public Form1()
70
+
71
+ {
72
+
73
+ InitializeComponent();
74
+
75
+
76
+
77
+ this.dataGridView1 = new DataGridView();
78
+
79
+ this.dataGridView1.Dock = DockStyle.Fill;
80
+
81
+ this.bindingSource1 = new BindingSource();
82
+
83
+ this.dataGridView1.DataSource = this.bindingSource1;
84
+
85
+ this.Controls.Add(this.dataGridView1);
86
+
87
+ this.bindingSource1.DataSource = CreateDataTable();
88
+
89
+ }
90
+
91
+
92
+
93
+ private DataTable CreateDataTable()
94
+
95
+ {
96
+
97
+ DataTable table = new DataTable();
98
+
99
+
100
+
101
+ table.Columns.Add(new DataColumn("番号", typeof(int)));
102
+
103
+ table.Columns.Add(new DataColumn("名前", typeof(string)));
104
+
105
+ table.Columns.Add(new DataColumn("数量", typeof(int)));
106
+
107
+ table.Columns.Add(new DataColumn("単価", typeof(decimal)));
108
+
109
+ table.Columns.Add(new DataColumn("合価", typeof(decimal)));
110
+
111
+
112
+
113
+ string connString = "server=localhost;user id=root;password=rkt81141;database=test";
114
+
115
+ string query = "SELECT Id AS 番号, Name AS 名前, Qty AS 数量, UnitPrice AS 単価, Qty * UnitPrice AS 合価 FROM list";
116
+
117
+ using (MySqlConnection connection = new MySqlConnection(connString))
118
+
119
+ {
120
+
121
+ using (MySqlCommand command = new MySqlCommand(query, connection))
122
+
123
+ {
124
+
125
+ MySqlDataAdapter adapter = new MySqlDataAdapter(command);
126
+
127
+ adapter.Fill(table);
128
+
129
+ }
130
+
131
+ }
132
+
133
+ return table;
134
+
135
+ }
136
+
137
+ }
138
+
139
+ }
140
+
141
+ ```
142
+
143
+
144
+
145
+ ![イメージ説明](8cad60c56bf417989418fb36f8438f54.jpeg)
146
+
147
+
148
+
149
+ ただ、こういうやり方より、データーソース構成ウイザードを使って作成することをお勧めします。今回のようなことで悩むことはなくなります。開発工数も保守工数も激減するはずです。

1

追記

2020/03/17 06:26

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,8 @@
1
1
  > 自分で設定した列の名称の下に、データを表示したいということです。
2
+
3
+
4
+
5
+ **追記**:「自分で設定した列」というのは、DataTable に番号、乗り物、アイコンという列名で列を作ったと理解してレスします。理解が違っていたら、どう違うのか書いてください。
2
6
 
3
7
 
4
8