回答編集履歴

1

追記

2017/01/21 17:09

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -11,3 +11,81 @@
11
11
 
12
12
 
13
13
  自分の場合マスター管理クラスを給与、社員それぞれに作り、対応する画面を取り付ける形にします。
14
+
15
+
16
+
17
+ ---
18
+
19
+ 追記
20
+
21
+
22
+
23
+ 質問の内容が把握できたので自分も回答のお手伝いを…
24
+
25
+
26
+
27
+ > 社員マスタークラスがNGと判断したデータの場所をfrmMenteに伝えるのって難しくないでしょうか?
28
+
29
+
30
+
31
+ DataAnnotationsを使うというのはこういうものです。
32
+
33
+ ```
34
+
35
+ public class Employee
36
+
37
+ {
38
+
39
+ [Display(Name="氏名")]
40
+
41
+ public string Name { get; set; }
42
+
43
+
44
+
45
+ [Display(Name="カナ")]
46
+
47
+ [RegularExpression(@"[ァ-ヶ]+", ErrorMessage = "全角カタカナのみ入力できます。")]
48
+
49
+ public string Kana { get; set; }
50
+
51
+
52
+
53
+ [Display(Name="社員番号")]
54
+
55
+ [Range(1, int.MaxValue, ErrorMessage="社員番号を設定して下さい。")]
56
+
57
+ public int EmployeeNumber { get; set; }
58
+
59
+ }
60
+
61
+ ```
62
+
63
+ こういうプロパティを公開しているモデルのコレクションを、データバインドするとエラー検証を自動的にやってくれるという優れものです。もしDataGridViewが対応していれば自動的にエラーがある場合表示されると思います。自分はWindows Formを使っていないのでどのようにエラー表示されるかまではわかりませんが…
64
+
65
+
66
+
67
+ もしもDataAnnotationsが使える場合は、Employeeモデルが直接上限値の範囲などを知っている状態なのでFormMenteは上限値などを知る必要がないわけです。
68
+
69
+
70
+
71
+
72
+
73
+ > あるフォームがそのクラスを利用して画面表示する場合に、「社員マスター管理クラス」からどうやって
74
+
75
+ データを受け取る事が正しい姿か知りたいと思います。
76
+
77
+
78
+
79
+ 基本的に、より中核的な部分に対して、より外側のクラスからアクセスするのが基本です。
80
+
81
+ 中核的な部分とはビジネスドメインのことであり、この場合社員管理クラスのことです。
82
+
83
+ そして、外側のクラスとはFormMenteなど画面クラスのことです。
84
+
85
+
86
+
87
+ FormMente側が管理クラスを参照するのはOKです。
88
+
89
+
90
+
91
+ 最近はこの関係が何事も前提になっていて、先ほど言っていたデータバインドなんかも、モデルを直接操作すれば画面に反映される、という形になっています。DataTableは画面側のクラスですから、社員管理マスタにDataTableを渡す、ということはあまりしませんね。