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

回答編集履歴

1

追記

2021/02/20 01:37

投稿

退会済みユーザー
answer CHANGED
@@ -16,4 +16,46 @@
16
16
 
17
17
  ObjectDataSource を使わないで自力でコードを書くという場合は、自分のコードの合わせて使いやすい方を使えば良いと思います。
18
18
 
19
- なお、余談ですが、Windows Forms アプリで型付 DataSet / DataTable + TableAdapter を使う場合、デザイナで作ると Fill の方を使いますが、それには型付 DataSet / DataTable のインスタンスへの参照を保持しておくという理由があります。Web アプリでは ViewState とか Session を使わない限りそういうことはできないので GetData の方が使いやすそうです。
19
+ なお、余談ですが、Windows Forms アプリで型付 DataSet / DataTable + TableAdapter を使う場合、デザイナで作ると Fill の方を使いますが、それには型付 DataSet / DataTable のインスタンスへの参照を保持しておくという理由があります。Web アプリでは ViewState とか Session を使わない限りそういうことはできないので GetData の方が使いやすそうです。
20
+
21
+ **【追記】**
22
+
23
+ > 表形式でデータを表示したいわけではなく、単にデータベースからデータを取得して、その値によって処理を分岐したい場合、質問文に追記させていただいたプログラムのFillメソッドまたはGetDataメソッドで両方とも同じようにデータを取得できると思います。
24
+
25
+ > データを取得してくるという意味では、同じ結果になると思いますが、どのようにFillメソッドとGetDataメソッドを使い分ければよいのでしょうか。
26
+
27
+ 上の回答に "自力でコードを書くという場合は、自分のコードの合わせて使いやすい方を使えば良いと思います "と書いた通りです。
28
+
29
+ ・・・が、それで終わりにしては身も蓋もなさそうなので、もう少し詳しい話を以下に追記しておきます。
30
+
31
+ 質問者さんの例「単にデータベースからデータを取得して、その値によって処理を分岐」で、質問者さんがそのためのカスタムクラスを作るとして、そのカスタムクラスに DataTable を渡すのにどうするかによります。そこには組織の設計思想・ルール・質問者さんの好み等々が関係するはずです。
32
+
33
+ 今質問者さんから提供されている情報では、そのあたりは他人は知る由もないので、自分でよく考えて決めてくださいという話にならざるを得ません。
34
+
35
+ ちなみに、上に書いた ObjectDataSource の場合は、SelectMethod プロパティにデータを取得するために呼び出すメソッドの名前を設定するという設計になっているので GetData を使っています。
36
+
37
+ 質問者さんが作るカスタムクラスもそういう設計にするなら GetData を使うことになると思います。
38
+
39
+ ただ、単純に DataTable が返ってくればいいということではなく、Fill メソッドの戻り値が欲しいとか、既存の DataTable に追加するようにしたい場合は Fill を使うということになると思います。
40
+
41
+ ウィザードが生成するコードを見て考えてみてください。以下に上の回答で例に使った TableAdapter のコードを参考に載せておきます。
42
+
43
+ ```
44
+ public virtual int Fill(Northwind.ProductsDataTable dataTable) {
45
+ this.Adapter.SelectCommand = this.CommandCollection[0];
46
+ if ((this.ClearBeforeFill == true)) {
47
+ dataTable.Clear();
48
+ }
49
+ int returnValue = this.Adapter.Fill(dataTable);
50
+ return returnValue;
51
+ }
52
+
53
+ public virtual Northwind.ProductsDataTable GetData() {
54
+ this.Adapter.SelectCommand = this.CommandCollection[0];
55
+ Northwind.ProductsDataTable dataTable = new Northwind.ProductsDataTable();
56
+ this.Adapter.Fill(dataTable);
57
+ return dataTable;
58
+ }
59
+ ```
60
+
61
+ そもそも「単にデータベースからデータを取得して、その値によって処理を分岐」という目的に型付 DataSet / DataTable + TableAdapter を使うのが適切かという話を考えるべきと思いますが、その話は今後の課題ということで・・・