質問編集履歴

1

解決したので最終的なコードを載せておきます

2018/03/08 03:38

投稿

kikiinu
kikiinu

スコア21

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,16 @@
4
4
 
5
5
 
6
6
 
7
+ 回答を頂いて無事解決しました。
8
+
9
+ 最終的なコードは1番下に載せています
10
+
11
+
12
+
13
+
14
+
15
+
16
+
7
17
  開発環境は以下の通りです
8
18
 
9
19
  VS2017
@@ -141,3 +151,55 @@
141
151
  ```
142
152
 
143
153
  上記のValiate~メソッドがプロパティごとにあります。
154
+
155
+
156
+
157
+ 以下が解決した最終的なコードです。
158
+
159
+ Valiate~メソッドを作る必要がなくなりました
160
+
161
+ ```C#
162
+
163
+ private void _dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
164
+
165
+ {
166
+
167
+ dynamic cellEx = _dgv[e.ColumnIndex, e.RowIndex];
168
+
169
+
170
+
171
+ var names = _dgv.Columns[e.ColumnIndex].Name.Split('-'); // 0 クラス名、1 プロパティ名
172
+
173
+ typeof(U).GetProperty(names[1]).SetValue(_validationObject, e.FormattedValue);
174
+
175
+ var errors = _db.Entry(_validationObject).Property(names[1]).GetValidationErrors();
176
+
177
+
178
+
179
+ cellEx.ErrorText = "";
180
+
181
+ foreach (var err in errors)
182
+
183
+ {
184
+
185
+ cellEx.ErrorText += err.ErrorMessage + "\n";
186
+
187
+ }
188
+
189
+ if (errors.Count != 0)
190
+
191
+ {
192
+
193
+ cellEx.ErrorText = cellEx.ErrorText.TrimEnd('\n');
194
+
195
+ e.Cancel = true;
196
+
197
+ _dgv.EndEdit();
198
+
199
+ _dgv.InvalidateCell(cellEx);
200
+
201
+ }
202
+
203
+ }
204
+
205
+ ```