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

質問編集履歴

1

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

2018/03/08 03:38

投稿

kikiinu
kikiinu

スコア24

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,11 @@
1
1
  いつもお世話になっております。
2
2
  いつも回答して頂き助かっています
3
3
 
4
+ 回答を頂いて無事解決しました。
5
+ 最終的なコードは1番下に載せています
6
+
7
+
8
+
4
9
  開発環境は以下の通りです
5
10
  VS2017
6
11
  NETFramework,Version=v4.5.21
@@ -69,4 +74,30 @@
69
74
 
70
75
 
71
76
  ```
72
- 上記のValiate~メソッドがプロパティごとにあります。
77
+ 上記のValiate~メソッドがプロパティごとにあります。
78
+
79
+ 以下が解決した最終的なコードです。
80
+ Valiate~メソッドを作る必要がなくなりました
81
+ ```C#
82
+ private void _dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
83
+ {
84
+ dynamic cellEx = _dgv[e.ColumnIndex, e.RowIndex];
85
+
86
+ var names = _dgv.Columns[e.ColumnIndex].Name.Split('-'); // 0 クラス名、1 プロパティ名
87
+ typeof(U).GetProperty(names[1]).SetValue(_validationObject, e.FormattedValue);
88
+ var errors = _db.Entry(_validationObject).Property(names[1]).GetValidationErrors();
89
+
90
+ cellEx.ErrorText = "";
91
+ foreach (var err in errors)
92
+ {
93
+ cellEx.ErrorText += err.ErrorMessage + "\n";
94
+ }
95
+ if (errors.Count != 0)
96
+ {
97
+ cellEx.ErrorText = cellEx.ErrorText.TrimEnd('\n');
98
+ e.Cancel = true;
99
+ _dgv.EndEdit();
100
+ _dgv.InvalidateCell(cellEx);
101
+ }
102
+ }
103
+ ```