teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

修正後ソースの追記

2019/09/15 04:28

投稿

ICCI
ICCI

スコア14

title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,39 @@
1
1
  現在C#で住所録を作成しており、削除フラグを使用して論理削除するという課題に悩んでいます。
2
2
  テーブルカラムにはDEL_FLG作成済みです。
3
3
  削除ボタン(DelBtn)をクリックすると確認メッセージ表示後にDataGridViewのその行を削除するという仕様です。
4
- 削除ボタンクリックイベント内削除処理の"UPDATE mst_address SET DEL_FLG = 1"のWHERE句の指定の仕方がわからず、現在は削除ボタンをクリックすると全てのデータのDEL_FLGが1になってしまいます。WHERE句で削除ボタンをクリックした行を指定するにはどうしたら良いでしょうか
4
+ 削除ボタンクリックイベント内削除処理の"UPDATE mst_address SET DEL_FLG = 1"のWHERE句の指定の仕方がわからず、現在は削除ボタンをクリックすると全てのデータのDEL_FLGが1になってしまいます。WHERE句で削除ボタンをクリックした行を指定するにはどうしたら良いでしょうか
5
- よろしくお願いします。
6
5
 
7
6
 
7
+ テーブルは以下になります。
8
+ 主キーはSEQ_NOとなっており、非表示の状態です。
9
+ 一行ごとに削除ボタンがあるDataGridViewで、ボタンを押下した行を削除するという仕様です。
10
+ よろしくお願い致します。
11
+ ```SQL
12
+
13
+ CREATE TABLE `mst_address` (
14
+ `SEQ_NO` int(11) NOT NULL AUTO_INCREMENT COMMENT '管理番号',
15
+ `NAME1` varchar(10) NOT NULL COMMENT '氏名1',
16
+ `NAME2` varchar(10) NOT NULL COMMENT '氏名2',
17
+ `ZIP1` varchar(3) NOT NULL COMMENT '郵便番号1',
18
+ `ZIP2` varchar(4) NOT NULL COMMENT '郵便番号2',
19
+ `ADDRESS3` varchar(100) NOT NULL COMMENT '住所3',
20
+ `ADDRESS1` varchar(100) DEFAULT NULL COMMENT '住所1',
21
+ `ADDRESS2` varchar(100) DEFAULT NULL COMMENT '住所2',
22
+ `TEL` varchar(20) DEFAULT NULL COMMENT '電話番号',
23
+ `INS_USER` varchar(10) NOT NULL COMMENT '登録者',
24
+ `INS_DATETIME` datetime NOT NULL COMMENT '登録日',
25
+ `UPD_USER` varchar(10) NOT NULL COMMENT '更新者',
26
+ `UPD_DATETIME` datetime NOT NULL COMMENT '更新日',
27
+ `DEL_FLG` bit(1) NOT NULL COMMENT '削除フラグ',
28
+ PRIMARY KEY (`SEQ_NO`)
29
+ ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
30
+
31
+ ```
32
+
33
+ 追記
34
+ 主キーSEQ_NOを追加(テーブルには非表示)し、WHERE句に指定した修正後ソースコードです。
35
+ dataGridView1.CurrentRow.Cells[1].ValueでSEQ_NOの値が取得できることは確認しています。
36
+
8
37
  ```C#
9
38
  namespace AddressList
10
39
  {
@@ -21,7 +50,7 @@
21
50
  using (MySqlCommand command = new MySqlCommand())
22
51
  {
23
52
  MySqlConnection conn = new MySqlConnection();
24
- conn.ConnectionString = "server=サーバ名; user id=ユーザID; Password=PW; database=address_note";
53
+ conn.ConnectionString = "server=サーバ名; user id=ID; Password=PW; database=address_note";
25
54
 
26
55
  //DBとの接続オープン
27
56
  conn.Open();
@@ -30,7 +59,7 @@
30
59
  DataTable dt = new DataTable();
31
60
 
32
61
  //SQL文と接続情報を引数に、データアダプターを作成
33
- MySqlDataAdapter da = new MySqlDataAdapter("SELECT NAME1,NAME2,ZIP1,ZIP2,ADDRESS1,ADDRESS2,ADDRESS3,TEL FROM mst_address WHERE DEL_FLG = 0", conn);
62
+ MySqlDataAdapter da = new MySqlDataAdapter("SELECT **SEQ_NO,** NAME1,NAME2,ZIP1,ZIP2,ADDRESS1,ADDRESS2,ADDRESS3,TEL FROM mst_address WHERE DEL_FLG = 0", conn);
34
63
 
35
64
 
36
65
  //SQL文で指定したデータをDataTableに格納
@@ -42,18 +71,21 @@
42
71
  //DBとの接続クローズ
43
72
  conn.Close();
44
73
 
74
+
75
+ ** dataGridView1.Columns[1].Visible = false; //SEQ_NOを非表示にする**
45
76
  //横幅指定・削除ボタン配置
46
- dataGridView1.Columns[1].Width = 50;
77
+ dataGridView1.Columns[2].Width = 50;
47
- dataGridView1.Columns[2].Width = 45;
78
+ dataGridView1.Columns[3].Width = 45;
48
- dataGridView1.Columns[3].Width = 40;
49
79
  dataGridView1.Columns[4].Width = 40;
50
- dataGridView1.Columns[5].Width = 70;
80
+ dataGridView1.Columns[5].Width = 40;
81
+ dataGridView1.Columns[6].Width = 70;
51
- dataGridView1.Columns[6].Width = 42;
82
+ dataGridView1.Columns[7].Width = 42;
52
- dataGridView1.Columns[7].Width = 40;
83
+ dataGridView1.Columns[8].Width = 40;
84
+ dataGridView1.Columns[9].Width = 90;
53
- dataGridView1.Columns["DelBtn"].DisplayIndex = 8;
85
+ dataGridView1.Columns["DelBtn"].DisplayIndex = 9;
54
86
 
55
87
  //氏名昇順でソートする
56
- dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Ascending);
88
+ dataGridView1.Sort(dataGridView1.Columns[2], ListSortDirection.Ascending);
57
89
  }
58
90
  }
59
91
 
@@ -75,7 +107,7 @@
75
107
  //MySQLへ接続
76
108
  MySqlConnection conn = new MySqlConnection();
77
109
  conn.ConnectionString = Properties.Settings.Default.address_noteConnectionString;
78
- MySqlCommand sqlCommand = new MySqlCommand(@"SELECT NAME1, NAME2, ZIP1, ZIP2, ADDRESS1, ADDRESS2, ADDRESS3, TEL FROM mst_address WHERE ADDRESS1 = @ADDRESS1 AND DEL_FLG = 0", conn);
110
+ MySqlCommand sqlCommand = new MySqlCommand(@"SELECT **SEQ_NO**, NAME1, NAME2, ZIP1, ZIP2, ADDRESS1, ADDRESS2, ADDRESS3, TEL FROM mst_address WHERE ADDRESS1 = @ADDRESS1 AND DEL_FLG = 0", conn);
79
111
 
80
112
  //データを保存するテーブル作成
81
113
  DataTable dt = new DataTable();
@@ -109,7 +141,7 @@
109
141
  //MySQLへ接続
110
142
  MySqlConnection conn = new MySqlConnection();
111
143
  conn.ConnectionString = Properties.Settings.Default.address_noteConnectionString;
112
- MySqlCommand sqlCommand = new MySqlCommand(@"SELECT NAME1, NAME2, ZIP1, ZIP2, ADDRESS1, ADDRESS2, ADDRESS3, TEL FROM mst_address WHERE NAME1 LIKE @NAME1 AND DEL_FLG = 0", conn);
144
+ MySqlCommand sqlCommand = new MySqlCommand(@"SELECT **SEQ_NO**, NAME1, NAME2, ZIP1, ZIP2, ADDRESS1, ADDRESS2, ADDRESS3, TEL FROM mst_address WHERE NAME1 LIKE @NAME1 AND DEL_FLG = 0", conn);
113
145
 
114
146
  //データを保存するテーブル作成
115
147
  DataTable dt = new DataTable();
@@ -157,20 +189,21 @@
157
189
  if (DialogResult.Yes == MessageBox.Show("削除してもよろしいですか?", "削除",
158
190
  MessageBoxButtons.YesNo, MessageBoxIcon.Question))
159
191
  {
192
+ // 削除
193
+ //this.dataGridView1.Rows.RemoveAt(e.RowIndex);
160
194
 
161
- // 削除処理
162
195
  MySqlConnection conn = new MySqlConnection();
163
196
  conn.ConnectionString = Properties.Settings.Default.address_noteConnectionString;
164
197
  conn.Open();
165
- MySqlCommand sqlCommand = new MySqlCommand("UPDATE mst_address SET DEL_FLG = 1", conn);
198
+ MySqlCommand sqlCommand = new MySqlCommand("UPDATE mst_address SET DEL_FLG = 1** WHERE SEQ_NO = dataGridView1.CurrentRow.Cells[1].Value**", conn);
166
199
  DataTable dt = new DataTable();
167
200
  MySqlDataReader reader = sqlCommand.ExecuteReader();
168
201
  dt.Load(reader);
169
202
  dataGridView1.DataSource = dt;
170
203
  reader.Close();
171
204
 
205
+ MessageBox.Show("削除完了しました。");
172
206
 
173
- MessageBox.Show("削除完了しました。");
174
207
  }
175
208
  else
176
209
  {
@@ -180,32 +213,6 @@
180
213
  }
181
214
  }
182
215
  }
183
-
184
- ```
216
+
185
-
186
- 追記
217
+
187
- テーブルは以下になります。
188
- 主キーはSEQ_NOとなっており、非表示の状態です。
189
- 一行ごとに削除ボタンがあるDataGridViewで、ボタンを押下した行を削除するという仕様です。
190
- よろしくお願い致します。
191
- ```SQL
192
-
193
- CREATE TABLE `mst_address` (
194
- `SEQ_NO` int(11) NOT NULL AUTO_INCREMENT COMMENT '管理番号',
195
- `NAME1` varchar(10) NOT NULL COMMENT '氏名1',
196
- `NAME2` varchar(10) NOT NULL COMMENT '氏名2',
197
- `ZIP1` varchar(3) NOT NULL COMMENT '郵便番号1',
198
- `ZIP2` varchar(4) NOT NULL COMMENT '郵便番号2',
199
- `ADDRESS3` varchar(100) NOT NULL COMMENT '住所3',
200
- `ADDRESS1` varchar(100) DEFAULT NULL COMMENT '住所1',
201
- `ADDRESS2` varchar(100) DEFAULT NULL COMMENT '住所2',
202
- `TEL` varchar(20) DEFAULT NULL COMMENT '電話番号',
203
- `INS_USER` varchar(10) NOT NULL COMMENT '登録者',
204
- `INS_DATETIME` datetime NOT NULL COMMENT '登録日',
205
- `UPD_USER` varchar(10) NOT NULL COMMENT '更新者',
206
- `UPD_DATETIME` datetime NOT NULL COMMENT '更新日',
207
- `DEL_FLG` bit(1) NOT NULL COMMENT '削除フラグ',
208
- PRIMARY KEY (`SEQ_NO`)
209
- ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
210
-
211
218
  ```

1

テーブル構造の追記

2019/09/15 04:28

投稿

ICCI
ICCI

スコア14

title CHANGED
File without changes
body CHANGED
@@ -181,4 +181,31 @@
181
181
  }
182
182
  }
183
183
 
184
+ ```
185
+
186
+ 追記
187
+ テーブルは以下になります。
188
+ 主キーはSEQ_NOとなっており、非表示の状態です。
189
+ 一行ごとに削除ボタンがあるDataGridViewで、ボタンを押下した行を削除するという仕様です。
190
+ よろしくお願い致します。
191
+ ```SQL
192
+
193
+ CREATE TABLE `mst_address` (
194
+ `SEQ_NO` int(11) NOT NULL AUTO_INCREMENT COMMENT '管理番号',
195
+ `NAME1` varchar(10) NOT NULL COMMENT '氏名1',
196
+ `NAME2` varchar(10) NOT NULL COMMENT '氏名2',
197
+ `ZIP1` varchar(3) NOT NULL COMMENT '郵便番号1',
198
+ `ZIP2` varchar(4) NOT NULL COMMENT '郵便番号2',
199
+ `ADDRESS3` varchar(100) NOT NULL COMMENT '住所3',
200
+ `ADDRESS1` varchar(100) DEFAULT NULL COMMENT '住所1',
201
+ `ADDRESS2` varchar(100) DEFAULT NULL COMMENT '住所2',
202
+ `TEL` varchar(20) DEFAULT NULL COMMENT '電話番号',
203
+ `INS_USER` varchar(10) NOT NULL COMMENT '登録者',
204
+ `INS_DATETIME` datetime NOT NULL COMMENT '登録日',
205
+ `UPD_USER` varchar(10) NOT NULL COMMENT '更新者',
206
+ `UPD_DATETIME` datetime NOT NULL COMMENT '更新日',
207
+ `DEL_FLG` bit(1) NOT NULL COMMENT '削除フラグ',
208
+ PRIMARY KEY (`SEQ_NO`)
209
+ ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
210
+
184
211
  ```