ASP.NETクラスに引数を渡す

解決


ぽんきち  2012-10-20 05:06:47  No: 147902  IP: [192.*.*.*]

お世話になります。現在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

編集 削除
魔界の仮面弁士  2012-10-20 19:21:03  No: 147903  IP: [192.*.*.*]

CallByName またはリフレクションを利用して、メソッド名を文字列指定にするか、
あるいはFill系メソッドの呼び出しをデリゲートかラムダにして呼ぶとか。

やりたいことに合致するかは分かりませんけれど…。

編集 削除
ぽんきち  2012-10-21 02:34:17  No: 147904  IP: [192.*.*.*]

魔界の仮面弁士様
ありがとういございます。

お願いがございます。
魔界の仮面弁士様に書き込んでいただいた内容を
具体的なコードで示していただけないでしょうか。

当方でもいろいろと調べてみたのですが
力及ばずコード化することができませんでした。
おんぶにだっこで大変申し訳ございませんが
よろしくお願いいたします。

編集 削除
魔界の仮面弁士  2012-10-22 12:04:02  No: 147905  IP: [192.*.*.*]

> 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 で充分であろうかと予想します。

編集 削除
ぽんきち  2012-10-22 22:26:25  No: 147906  IP: [192.*.*.*]

魔界の仮面弁士様
お忙しいところを対応いただき、ありがとうございます。
教えていただいたようにやってみようかと思います。
めどがつきましたので一応解決させていtだきます。

ありがとうございました。

編集 削除