質問編集履歴

3

ソースと条件をもう少し詳細に記述

2017/12/27 09:11

投稿

meesa
meesa

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,38 @@
1
1
  ###前提・実現したいこと
2
2
 
3
+ ASP.NETでWEBアプリケーションを開発しています。
4
+
5
+ 画面上に表を配置し、DBから取得した値を表示させようとしています。
6
+
7
+ セルには、DBから取得した値(数値0~9)や、「申請種類」という条件に応じて、
8
+
3
- DBら取得した値を元に表を生成し値に応じてチェックボックスを表示たいです。
9
+ 文字列か、チェックボックスを表示させたいです。
10
+
11
+
12
+
13
+ こういった場合に、なるべく可読性の高い、シンプルなソースで実現するための手法として、
14
+
15
+ どのような方法が考えられるか、教えていただきたいです。
16
+
17
+
18
+
19
+ 自分で考えた方法は、
20
+
21
+
22
+
23
+ 0. GridViewを使用して表を生成
24
+
25
+ 0. チェックボックスを表示する可能性があるセルについては、TemplateFieldにし、
26
+
27
+ ラベルとチェックボックスを配置
28
+
29
+ 0. RowDataBoundイベントで、ラベルとチェックボックスの表示非表示に切り替えを行う
30
+
31
+
32
+
33
+ というものです。
34
+
35
+
4
36
 
5
37
  表示したい表のイメージは以下になります。
6
38
 
@@ -8,9 +40,31 @@
8
40
 
9
41
 
10
42
 
43
+ ・DBの値
44
+
45
+ |管理No.|ユーザー名|申請項目1|申請項目2|申請項目3|
46
+
47
+ |:--:|:--:|:--:|:--:|
48
+
49
+ |001|ユーザー1|1|0|1|
50
+
51
+ |001|ユーザー2|2|1|3|
52
+
53
+ |001|ユーザー3|1|2|2|
54
+
55
+ |002|ユーザー4|0|8|8|
56
+
57
+
58
+
59
+ ・画面表示結果(管理No単位で画面表示)
60
+
61
+ 管理No.:001
62
+
63
+ 申請種類:申請1
64
+
11
65
  |ユーザー名|申請項目1|申請項目2|申請項目3|
12
66
 
13
- |:--:|:--:|:--:|
67
+ |:--:|:--:|:--:|:--:|
14
68
 
15
69
  |ユーザー1|□|申請不可|□|
16
70
 
@@ -24,27 +78,53 @@
24
78
 
25
79
 
26
80
 
27
- チェックボックスの表示は、以下条件があります。
81
+ 申請種類とDB値の組み合わせ、その表示結果は、項目1場合、
82
+
28
-
83
+ 申請1かつ0:申請不可
29
-
30
-
84
+
31
- 申請可能な項目に、チェックボックスを表示する。
85
+ 申請2かつ0:チェックボックス(OFF)
86
+
32
-
87
+ 申請1かつ1:チェックボックス(OFF)
88
+
89
+ 申請2かつ1:申請対象外
90
+
91
+ 申請1かつ2:チェックボックス(ON)
92
+
93
+ 申請2かつ2:申請1申請中
94
+
95
+
96
+
97
+ 項目2の場合、
98
+
99
+ 申請1かつ0:申請不可
100
+
101
+ 申請2かつ0:チェックボックス(OFF)
102
+
103
+ 申請1かつ1:チェックボックス(OFF)
104
+
33
-  (申請不可な項目には、申請不可と文字を表示したい
105
+ 申請2かつ1:申請対象外(理由A
106
+
34
-
107
+ 申請1かつ2:チェックボックス(OFF)
108
+
35
-
109
+ 申請2かつ2:申請対象外(理由B)
110
+
36
-
111
+ 申請1かつ3:チェックボックス(ON)
112
+
113
+ 申請2かつ3:申請1申請中
114
+
115
+
116
+
37
- ・申請内容が既登録されており再編集表示すことがあ
117
+ ・・・のように、項目ごとに、DBが同じ値あっても意味が異な場合があります
118
+
38
-
119
+ また、DBの値7~9は、申請2の場合にチェックボックスを表示し、申請1では文字列を表示する
120
+
39
-  もし保存されていた情報、チェック済みだった場合
121
+ ために使用されています。(下記ソースでは省略しています)
40
-
41
-  初期値をチェック済み状態で表示する。
42
122
 
43
123
 
44
124
 
45
125
  ###該当のソースコード
46
126
 
47
- ```VB
127
+ ```lang-vb
48
128
 
49
129
  Private Sub GV_User_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GV_User.RowDataBound
50
130
 
@@ -52,11 +132,13 @@
52
132
 
53
133
  If e.Row.RowType = DataControlRowType.DataRow Then
54
134
 
55
- Select Case e.Row.Cells(6).Text
135
+ Select Case e.Row.Cells(2).Text
56
136
 
57
137
  Case "0"
58
138
 
139
+           If DemType = 1 then
140
+
59
- 'チェックボックスを表示せず、申請不可の文字を表示
141
+ '申請種類1の場合、チェックボックスを表示せず、申請不可の文字を表示
60
142
 
61
143
  e.Row.FindControl("lbl1").Visible = True
62
144
 
@@ -64,8 +146,22 @@
64
146
 
65
147
  e.Row.FindControl("ckb1").Visible = False
66
148
 
149
+ Else
150
+
151
+ '申請1ではない場合、チェックボックス(オフ)を表示
152
+
153
+ e.Row.FindControl("lbl1").Visible = False
154
+
155
+ e.Row.FindControl("ckb1").Visible = True
156
+
157
+ CType(e.Row.FindControl("ckb1"),CheckBox).Checked = False
158
+
159
+ End If
160
+
67
161
  Case "1"
68
162
 
163
+           If DemType = 1 then
164
+
69
165
  'チェックボックス(オフ)を表示
70
166
 
71
167
  e.Row.FindControl("lbl1").Visible = False
@@ -74,9 +170,23 @@
74
170
 
75
171
  CType(e.Row.FindControl("ckb1"),CheckBox).Checked = False
76
172
 
173
+ Else
174
+
175
+ '申請1ではない場合、チェックボックスを表示せず、申請対象外の文字を表示
176
+
177
+ e.Row.FindControl("lbl1").Visible = True
178
+
179
+ CType(e.Row.FindControl("lbl1"), Label).Text = "申請対象外"
180
+
181
+ e.Row.FindControl("ckb1").Visible = False
182
+
183
+ End If
184
+
77
185
  Case "2"
78
186
 
187
+           If DemType = 1 then
188
+
79
- 'チェックボックス(オン)を表示
189
+ '申請種類1の場合、チェックボックス(オン)を表示
80
190
 
81
191
  e.Row.FindControl("lbl1").Visible = False
82
192
 
@@ -84,6 +194,22 @@
84
194
 
85
195
  CType(e.Row.FindControl("ckb1"),CheckBox).Checked = True
86
196
 
197
+ Else
198
+
199
+ '申請1ではない場合、チェックボックスを表示せず、申請1申請中の文字を表示
200
+
201
+ e.Row.FindControl("lbl1").Visible = True
202
+
203
+ CType(e.Row.FindControl("lbl1"), Label).Text = "申請1申請中"
204
+
205
+ e.Row.FindControl("ckb1").Visible = False
206
+
207
+ End If
208
+
209
+
210
+
211
+          '以下略(値7~9の場合の場合の分岐処理)
212
+
87
213
  End Select
88
214
 
89
215
 
@@ -100,23 +226,15 @@
100
226
 
101
227
  ###試したこと
102
228
 
103
- 上記ソースの通り、GridViewを使用し、RowDataBoundイベントで、
229
+ 上記ソースGridViewRowDataBound処理の容になります。
104
-
105
- TemplateFieldに対してセルの中身を変更する処理を書いています。
230
+
106
-
107
- TemplateFiledには、あらかじめラベルとチェックボックスを配置し、
108
-
109
- 上記ソースれぞれ表示/非表示チェックのオン/オフをしています
231
+ (実ソースそのままは出すこが出来ないため、簡略化しています
110
-
111
-
112
-
232
+
113
- 一応、このソースで目的の動作をすることは確認できているのですが、
233
+ 一応、このソースで目的の動作をすることは確認できているのですが、うまく共通化や簡略化が
114
-
234
+
115
- RowDataBoundイベントが大変長くなってしまっています。(350行ほど)
235
+ 出来ず、RowDataBoundイベントが大変長くなってしまっています。(350行ほど)
116
-
117
-
118
-
119
- 実際のソースはSelect CaseのCaseが約10パターンあります。
236
+
237
+
120
238
 
121
239
  また、上記表の列「申請項目」に該当するものが、全部で6列あります。
122
240
 

2

Select分岐について表記を修正

2017/12/27 09:10

投稿

meesa
meesa

スコア12

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  |ユーザー1|□|申請不可|□|
16
16
 
17
- |ユーザー2|■|□|申請不可|
17
+ |ユーザー2|■|□|申請|
18
18
 
19
19
  |ユーザー3|□|■|■|
20
20
 
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- '以下略(項目数分繰り返し)
91
+ '以下略(申請項目数分繰り返し)
92
92
 
93
93
  End If
94
94
 
@@ -106,17 +106,25 @@
106
106
 
107
107
  TemplateFiledには、あらかじめラベルとチェックボックスを配置し、
108
108
 
109
- 上記ソースでそれぞれの表示/非表示と表示切り替えをしています。
109
+ 上記ソースでそれぞれの表示/非表示とチェックオン/オフをしています。
110
110
 
111
111
 
112
112
 
113
113
  一応、このソースで目的の動作をすることは確認できているのですが、
114
114
 
115
- 実際のソースはSelect分岐約10個あり、それがもう5項目分あります。
115
+ RowDataBoundイベント大変長くなってしっています。(350行ほど)
116
116
 
117
- 項目ごと分岐数や表示文字列が異なったりするため、共通関数にうまく落とし込めない結果、
118
117
 
118
+
119
+ 実際のソースはSelect CaseのCaseが約10パターンあります。
120
+
119
- RowDataBoundイベント大変長くなってしっています。。。
121
+ また、上記表の列「申請項目」に該当するもの、全部で6列あります。
122
+
123
+ 項目ごと分岐数や表示文字列が異なったりするため、共通関数にうまく落とし込めません。
124
+
125
+ そもそも、チェックボックスやラベルの表示/非表示を切り替える、という
126
+
127
+ やり方が、一般的なのかどうかもわかりません。
120
128
 
121
129
 
122
130
 

1

誤記修正(DataGridViewではなく、GridViewでした)

2017/12/26 12:19

投稿

meesa
meesa

スコア12

test CHANGED
File without changes
test CHANGED
@@ -100,7 +100,7 @@
100
100
 
101
101
  ###試したこと
102
102
 
103
- 上記ソースの通り、DataGridViewを使用し、RowDataBoundイベント内で、
103
+ 上記ソースの通り、GridViewを使用し、RowDataBoundイベント内で、
104
104
 
105
105
  TemplateFieldに対してセルの中身を変更する処理を書いています。
106
106
 
@@ -126,7 +126,7 @@
126
126
 
127
127
 
128
128
 
129
- DataGridViewにもこだわりませんので、ご意見やアイディア、ヒントを伺えれば助かります。
129
+ GridViewにもこだわりませんので、ご意見やアイディア、ヒントを伺えれば助かります。
130
130
 
131
131
 
132
132