お世話になります。現在ASP.NETでのWeb開発をやっています
クエリを複数使わなくてはならずobjectdatasouceにtableadapterを使って、クエリを切り替えて使うように考えています。その際に以下のクラスを使いますがその中に書かれるta.fill〜の部分を動的に切り替えたいと思っています。
このクラスはコンパイル時に自動で読み込まれるものです。
フォームのコントロール値などを使ってうまく切り替えるようなロジックがわからなくて質問させていただきました。よろしくお願いします。
Public Class test
<DataObjectMethod(DataObjectMethodType.Select)> _
Public Function GetDataspecial() As DataSet2.pspromlistDataTable
Dim ads As New DataSet2
Dim ta As New DataSet2TableAdapters.pspromlistTableAdapter
ta.FillByALL(ads.pspromlist)←ここを切り替えて使いたい
たとえば ta.FillBycode(ads.pspromlist)を使う
Return ads.pspromlist
End Function
End Class
CallByName またはリフレクションを利用して、メソッド名を文字列指定にするか、
あるいはFill系メソッドの呼び出しをデリゲートかラムダにして呼ぶとか。
やりたいことに合致するかは分かりませんけれど…。
魔界の仮面弁士様
ありがとういございます。
お願いがございます。
魔界の仮面弁士様に書き込んでいただいた内容を
具体的なコードで示していただけないでしょうか。
当方でもいろいろと調べてみたのですが
力及ばずコード化することができませんでした。
おんぶにだっこで大変申し訳ございませんが
よろしくお願いいたします。
> ta.FillBycode(ads.pspromlist)を使う
TableAdapter のメソッド名は任意に指定できますが、一般的には
FillByCode の引数は、(table) ではなく (table, code) になるものかと。
>>> ta.FillByALL(ads.pspromlist)←ここを切り替えて使いたい
>>> たとえば ta.FillBycode(ads.pspromlist)を使う
>> CallByName またはリフレクションを利用して、メソッド名を文字列指定にするか
> 具体的なコードで示していただけないでしょうか。
CallByName(ta, "FillByALL", CallType.Method, ads.pspromlist)
CallByName(ta, "FillBycode", CallType.Method, ads.pspromlist)
という感じです。第二引数(メソッド名)を String 型変数に置き換えてください。
また、各メソッドの引数の内容が異なる場合には、Object型配列経由で渡します。
もしも出力引数(ByRef)が必要ならば、リフレクションを使う事になりますが、
今回のパターンでは、CallByName で充分であろうかと予想します。
魔界の仮面弁士様
お忙しいところを対応いただき、ありがとうございます。
教えていただいたようにやってみようかと思います。
めどがつきましたので一応解決させていtだきます。
ありがとうございました。
ツイート | ![]() |