Share via


宣言パラメーター (VB)

作成者: Scott Mitchell

PDF のダウンロード

このチュートリアルでは、ハードコーディングされた値に設定されたパラメーターを使用して、DetailsView コントロールに表示するデータを選択する方法について説明します。

はじめに

最後の チュートリアル では、 クラスからメソッドを呼び出した ObjectDataSource コントロールにバインドされた GridView、DetailsView、および FormView コントロールを使用してデータを GetProducts() 表示する方法について ProductsBLL 説明しました。 このメソッドは GetProducts() 、Northwind データベース Products のテーブルのすべてのレコードが設定された、厳密に型指定された DataTable を返します。 ProductsBLLクラスには、製品GetProductByProductID(productID)のサブセット (、GetProductsByCategoryID(categoryID)、) GetProductsBySupplierID(supplierID)のみを返す追加のメソッドが含まれています。 これら 3 つのメソッドでは、返された製品情報をフィルター処理する方法を示す入力パラメーターが必要です。

ObjectDataSource を使用して、入力パラメーターを必要とするメソッドを呼び出すことができますが、そのためには、これらのパラメーターの値の取得元を指定する必要があります。 パラメーター値は、ハードコーディングすることも、クエリ文字列値、セッション変数、ページ上の Web コントロールのプロパティ値など、さまざまな動的ソースから取得することもできます。

このチュートリアルでは、まず、ハードコーディングされた値に設定されたパラメーターを使用する方法を説明します。 具体的には、特定の製品に関する情報を表示するページに DetailsView を追加する方法について説明します。つまり、Chef Anton's Gumbo Mix は ProductID 5 です。 次に、Web コントロールに基づいてパラメーター値を設定する方法について説明します。 特に、TextBox を使用してユーザーが国/地域に入力できるようにします。その後、[ボタン] をクリックして、その国/地域に存在するサプライヤーの一覧を表示できます。

Hard-Coded パラメーター値の使用

最初の例では、まずフォルダー内のページに DetailsView コントロールをDeclarativeParams.aspxBasicReporting追加します。 DetailsView のスマート タグから、ドロップダウン リストから [新しいデータ ソース>] を選択<し、ObjectDataSource を追加することを選択します。

ObjectDataSource をページに追加する

図 1: ObjectDataSource をページに追加する (クリックするとフルサイズの画像が表示されます)

これにより、ObjectDataSource コントロールの [データ ソースの選択] ウィザードが自動的に開始されます。 ウィザードの最初の ProductsBLL 画面からクラスを選択します。

ProductsBLL クラスを選択する

図 2: クラスを選択します ProductsBLL (クリックするとフルサイズの画像が表示されます)

特定の製品に関する情報を表示するため、 メソッドを GetProductByProductID(productID) 使用します。

GetProductByProductID(productID) メソッドを選択する

図 3: メソッドを選択します GetProductByProductID(productID) (クリックするとフルサイズの画像が表示されます)

選択したメソッドにはパラメーターが含まれるため、ウィザードにはもう 1 つの画面があり、パラメーターに使用する値を定義するように求められます。 左側の一覧には、選択したメソッドのすべてのパラメーターが表示されます。 の GetProductByProductID(productID) 場合、 は 1 つだけ productIDです。 右側では、選択したパラメーターの値を指定できます。 パラメーター ソース ドロップダウン リストは、パラメーター値に使用できるさまざまなソースを列挙します。 パラメーターにハードコーディングされた値 5 productID を指定する必要があるため、[パラメーター ソース] を [なし] のままにし、[DefaultValue] ボックスに「5」と入力します。

productID パラメーターには、Hard-Coded パラメーター値 5 が使用されます

図 4: パラメーターに Hard-Coded パラメーター値 5 が使用 productID されます (フルサイズの画像を表示する をクリックします)。

データ ソースの構成ウィザードが完了すると、ObjectDataSource コントロールの宣言型マークアップには、 プロパティで定義されているメソッドによってSelectParameters予期される各入力パラメーターのオブジェクトがSelectMethodコレクションに含まれますParameter。 この例で使用しているメソッドは、1 つの入力パラメーター のみを想定しているため、 parameterIDここにはエントリが 1 つだけあります。 コレクションには SelectParameters 、 名前空間の クラスから派生した任意の Parameter クラスを System.Web.UI.WebControls 含めることができます。 ハードコーディングされたパラメーター値の場合は基底 Parameter クラスが使用されますが、他のパラメーター ソース オプションでは派生 Parameter クラスが使用されます。必要に応じて、独自の カスタム パラメーター型を作成することもできます。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
    <SelectParameters>
        <asp:Parameter DefaultValue="5"
           Name="productID" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

注意

独自のコンピューターでフォローしている場合、この時点で表示される宣言型マークアップには、 、、および DeleteMethod プロパティの値UpdateMethodInsertMethodと がDeleteParameters含まれる場合があります。 ObjectDataSource の [データ ソースの選択] ウィザードでは、 から挿入、更新、削除に使用するメソッド ProductBLL が自動的に指定されるため、明示的にクリアしない限り、上記のマークアップに含まれます。

このページにアクセスすると、データ Web コントロールは ObjectDataSource のSelectメソッドを呼び出します。これにより、入力パラメーターにハードコーディングされた値 5 を使用してクラスGetProductByProductID(productID)のメソッドがproductID呼び出ProductsBLLされます。 メソッドは、Chef Anton の Gumbo Mix (5 の製品) に関する情報を含む 1 行を含む厳密に型指定された ProductDataTable オブジェクトを ProductID 返します。

シェフアントンのガンボミックスに関する情報が表示されます

図 5: シェフ アントンのガンボ ミックスに関する情報が表示されます (フルサイズの画像を表示する をクリックします)

パラメーター値を Web コントロールのプロパティ値に設定する

ObjectDataSource のパラメーター値は、ページ上の Web コントロールの値に基づいて設定することもできます。 これを説明するために、ユーザーが指定した国にあるすべての仕入先を一覧表示する GridView を用意しましょう。 これを実現するには、まず、ユーザーが国名を入力できるページに TextBox を追加します。 この TextBox コントロールの ID プロパティを に設定します CountryName。 Button Web コントロールも追加します。

ID CountryName を使用して TextBox をページに追加する

図 6: を使用して TextBox をページ IDCountryName に追加する (フルサイズの画像を表示する 場合はクリックします)

次に、ページに GridView を追加し、スマート タグから新しい ObjectDataSource を追加することを選択します。 サプライヤー情報を表示するため、ウィザードの SuppliersBLL 最初の画面からクラスを選択します。 2 番目の画面で、 メソッドを選択します GetSuppliersByCountry(country)

GetSuppliersByCountry(country) メソッドを選択する

図 7: メソッドの GetSuppliersByCountry(country) 選択 (クリックするとフルサイズの画像が表示されます)

GetSuppliersByCountry(country)メソッドには入力パラメーターがあるため、パラメーター値を選択するための最終画面がウィザードに再度表示されます。 今回は、[パラメーター ソース] を [制御] に設定します。 これにより、ControlID ドロップダウン リストにページ上のコントロールの名前が設定されます。リストからコントロールを CountryName 選択します。 ページに初めてアクセスすると、 CountryName TextBox は空白になるため、結果は返されず、何も表示されません。 既定で結果を表示する場合は、それに応じて DefaultValue テキスト ボックスを設定します。

パラメーター値を CountryName コントロール値に設定する

図 8: パラメーター値をコントロール値に設定します CountryName (クリックするとフルサイズの画像が表示されます)

ObjectDataSource の宣言型マークアップは、標準Parameterオブジェクトではなく ControlParameter を使用して、最初の例とは若干異なります。 ControlParameterには、Web コントロールの をID指定するための追加のプロパティと、 パラメーターに使用するプロパティ値 (PropertyName) があります。 データ ソースの構成ウィザードは、TextBox の場合、パラメーター値に プロパティを Text 使用する必要があると判断するのに十分なスマート機能を備えています。 ただし、Web コントロールとは異なるプロパティ値を使用する場合は、ここで値を PropertyName 変更するか、ウィザードの [詳細プロパティの表示] リンクをクリックします。

<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
    SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
    <SelectParameters>
        <asp:ControlParameter ControlID="CountryName"
            Name="country" PropertyName="Text"
            Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

初めてページにアクセスすると、 CountryName TextBox が空になります。 ObjectDataSource の Select メソッドは GridView によって引き続き呼び出されますが、 の Nothing 値は メソッドに GetSuppliersByCountry(country) 渡されます。 TableAdapter は をNothingデータベース値 (DBNull.Value) に変換しますが、 メソッドでGetSuppliersByCountry(country)使用されるクエリは、パラメーターに値が指定されている@CategoryID場合NULLに値を返さないよう書NULLき込まれます。 つまり、サプライヤーは返されません。

ただし、訪問者が国/地域に入り、[仕入先の表示] ボタンをクリックしてポストバックを行うと、ObjectDataSource の Select メソッドが再クエリされ、TextBox コントロールの Text 値が country パラメーターとして渡されます。

カナダからのサプライヤーが表示されます

図 9: カナダのサプライヤーが表示されている (クリックするとフルサイズの画像が表示されます)

既定ですべての仕入先を表示する

最初にページを表示するときにサプライヤーを表示するのではなく、最初 にすべての サプライヤーを表示し、ユーザーがテキスト ボックスに国名を入力してリストを下に表示できるようにすることができます。 TextBox が空の場合、 SuppliersBLL クラスの GetSuppliersByCountry(country) メソッドは入力パラメーターに Nothingcountry されます。 この Nothing 値は DAL の GetSupplierByCountry(country) メソッドに渡され、次のクエリで パラメーターのデータベース NULL@Country に変換されます。

SELECT     SupplierID, CompanyName, Address, City, Country, Phone
FROM         Suppliers
WHERE Country = @Country

列に値があるレコードCountryであっても、式Country = NULLNULL常に False を返します。したがって、レコードは返されません。

country TextBox が空のときに すべての 仕入先を返すには、BLL の メソッドを GetSuppliersByCountry(country) 拡張して、country パラメーターが の場合に メソッドを呼び出 GetSuppliers() し、それ以外の場合は Nothing DAL の GetSuppliersByCountry(country) メソッドを呼び出すことができます。 これは、国が指定されていない場合にすべてのサプライヤーを返し、country パラメーターが含まれている場合はサプライヤーの適切なサブセットを返す効果があります。

クラスの GetSuppliersByCountry(country) メソッドを SuppliersBLL 次のように変更します。

Public Function GetSuppliersByCountry(country As String) _
    As Northwind.SuppliersDataTable
    If String.IsNullOrEmpty(country) Then
        Return GetSuppliers()
    Else
        Return Adapter.GetSuppliersByCountry(country)
    End If
End Function

この変更により、 DeclarativeParams.aspx 最初にアクセスしたとき (または TextBox が空の場合) にすべてのサプライヤーが CountryName 表示されます。

すべてのサプライヤーが既定で表示されるようになりました

図 10: すべての仕入先が既定で表示されるようになりました (クリックするとフルサイズの画像が表示されます)

まとめ

入力パラメーターでメソッドを使用するには、ObjectDataSource SelectParameters のコレクション内のパラメーターの値を指定する必要があります。 パラメーターの種類が異なると、パラメーター値をさまざまなソースから取得できます。 既定のパラメーター型ではハードコーディングされた値が使用されますが、クエリ文字列、セッション変数、Cookie、さらにはページ上の Web コントロールからユーザーが入力した値から、パラメーター値を簡単に (コード行なしで) 取得できます。

このチュートリアルで説明した例では、宣言型パラメーター値を使用する方法を示しました。 ただし、現在の日時など、利用できないパラメーター ソースを使用する必要がある場合や、サイトでメンバーシップを使用していた場合は、訪問者のユーザー ID が必要になる場合があります。 このようなシナリオでは、ObjectDataSource が基になるオブジェクトのメソッドを呼び出す前に、パラメーター値をプログラムで設定できます。 これを実現する方法については、 次のチュートリアルで説明します。

幸せなプログラミング!

著者について

7 冊の ASP/ASP.NET 書籍の著者であり、 4GuysFromRolla.com の創設者である Scott Mitchell は、1998 年から Microsoft Web テクノロジと協力しています。 Scott は独立したコンサルタント、トレーナー、ライターとして働いています。 彼の最新の本は サムズ・ティーチ・自分自身 ASP.NET 24時間で2.0です。 にアクセスmitchell@4GuysFromRolla.comすることも、ブログを介して アクセスすることもできます。これは でhttp://ScottOnWriting.NET確認できます。

特別な感謝

このチュートリアル シリーズは、多くの役立つ校閲者によってレビューされました。 このチュートリアルのリード レビュー担当者は、ヒルトン ギセナウでした。 今後の MSDN 記事の確認に関心がありますか? その場合は、 に行mitchell@4GuysFromRolla.comをドロップしてください。