宣言パラメーター (VB)
このチュートリアルでは、ハードコーディングされた値に設定されたパラメーターを使用して、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.aspx
BasicReporting
追加します。 DetailsView のスマート タグから、ドロップダウン リストから [新しいデータ ソース>] を選択<し、ObjectDataSource を追加することを選択します。
図 1: ObjectDataSource をページに追加する (クリックするとフルサイズの画像が表示されます)
これにより、ObjectDataSource コントロールの [データ ソースの選択] ウィザードが自動的に開始されます。 ウィザードの最初の ProductsBLL
画面からクラスを選択します。
図 2: クラスを選択します ProductsBLL
(クリックするとフルサイズの画像が表示されます)
特定の製品に関する情報を表示するため、 メソッドを GetProductByProductID(productID)
使用します。
図 3: メソッドを選択します GetProductByProductID(productID)
(クリックするとフルサイズの画像が表示されます)
選択したメソッドにはパラメーターが含まれるため、ウィザードにはもう 1 つの画面があり、パラメーターに使用する値を定義するように求められます。 左側の一覧には、選択したメソッドのすべてのパラメーターが表示されます。 の GetProductByProductID(productID)
場合、 は 1 つだけ productID
です。 右側では、選択したパラメーターの値を指定できます。 パラメーター ソース ドロップダウン リストは、パラメーター値に使用できるさまざまなソースを列挙します。 パラメーターにハードコーディングされた値 5 productID
を指定する必要があるため、[パラメーター ソース] を [なし] のままにし、[DefaultValue] ボックスに「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
プロパティの値UpdateMethod
InsertMethod
と が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 コントロールも追加します。
図 6: を使用して TextBox をページ ID
CountryName
に追加する (フルサイズの画像を表示する 場合はクリックします)
次に、ページに GridView を追加し、スマート タグから新しい ObjectDataSource を追加することを選択します。 サプライヤー情報を表示するため、ウィザードの SuppliersBLL
最初の画面からクラスを選択します。 2 番目の画面で、 メソッドを選択します GetSuppliersByCountry(country)
。
図 7: メソッドの GetSuppliersByCountry(country)
選択 (クリックするとフルサイズの画像が表示されます)
GetSuppliersByCountry(country)
メソッドには入力パラメーターがあるため、パラメーター値を選択するための最終画面がウィザードに再度表示されます。 今回は、[パラメーター ソース] を [制御] に設定します。 これにより、ControlID ドロップダウン リストにページ上のコントロールの名前が設定されます。リストからコントロールを CountryName
選択します。 ページに初めてアクセスすると、 CountryName
TextBox は空白になるため、結果は返されず、何も表示されません。 既定で結果を表示する場合は、それに応じて DefaultValue テキスト ボックスを設定します。
図 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)
メソッドは入力パラメーターに Nothing
渡 country
されます。 この Nothing
値は DAL の GetSupplierByCountry(country)
メソッドに渡され、次のクエリで パラメーターのデータベース NULL
値 @Country
に変換されます。
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
列に値があるレコードCountry
であっても、式Country = NULL
はNULL
常に 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をドロップしてください。