ObjectDataSource のパラメーター値をプログラムで設定する (VB)

作成者: Scott Mitchell

PDF のダウンロード

このチュートリアルでは、1 つの入力パラメーターを受け取り、データを返すメソッドを DAL と BLL に追加する方法について説明します。 この例では、このパラメーターをプログラムで設定します。

はじめに

前のチュートリアルで説明したように、ObjectDataSource のメソッドにパラメーター値を宣言的に渡すためのオプションがいくつかあります。 パラメーター値がハードコーディングされている場合、ページ上の Web コントロールから取得された場合、またはデータ ソース オブジェクトによって読み取り可能な他のソース Parameter 内にある場合 (たとえば、コード行を記述せずに、その値を入力パラメーターにバインドできます)。

ただし、パラメーター値が、組み込みのデータ ソース Parameter オブジェクトの 1 つによってまだ考慮されていないソースから取得される場合があります。 サイトでユーザー アカウントがサポートされている場合は、現在ログインしている訪問者のユーザー ID に基づいて パラメーターを設定できます。 または、ObjectDataSource の基になるオブジェクトのメソッドにパラメーター値を一緒に送信する前に、パラメーター値をカスタマイズする必要がある場合があります。

ObjectDataSource Select のメソッドが呼び出されるたびに、ObjectDataSource は最初に Selecting イベントを発生させます。 その後、ObjectDataSource の基になるオブジェクトのメソッドが呼び出されます。 これで ObjectDataSource の Selected イベント が発生します (図 1 は、この一連のイベントを示しています)。 ObjectDataSource の基になるオブジェクトのメソッドに渡されるパラメーター値は、イベントのイベント ハンドラー Selecting で設定またはカスタマイズできます。

ObjectDataSource の Selected イベントと Selecting イベントは、基になるオブジェクトのメソッドが呼び出される前と後に発生します

図 1: ObjectDataSource とSelectingイベントは、基になるオブジェクトのSelectedメソッドが呼び出される前と後に発生します (フルサイズの画像を表示する場合はクリックします)

このチュートリアルでは、 型Integerの単一の入力パラメーター Monthを受け取り、指定した Monthに採用記念日を持つ従業員が入力されたオブジェクトを返すEmployeesDataTableメソッドを DAL と BLL に追加する方法について説明します。 この例では、現在の月に基づいてプログラムでこのパラメーターを設定し、"今月の従業員の記念日" の一覧を示します。

それでは作業を始めましょう。

手順 1: メソッドを に追加するEmployeesTableAdapter

最初の例では、指定した月に発生した従業員 HireDate を取得する手段を追加する必要があります。 アーキテクチャに従ってこの機能を提供するには、まず、適切な SQL ステートメントにマップする メソッドを で EmployeesTableAdapter 作成する必要があります。 これを実現するには、まず Northwind Typed DataSet を開きます。 ラベルを右クリックし、[クエリの EmployeesTableAdapter 追加] を選択します。

EmployeesTableAdapter に新しいクエリを追加する

図 2: に新しいクエリを追加する EmployeesTableAdapter (フルサイズの画像を表示する場合はクリックします)

行を返す SQL ステートメントを追加することを選択します。 [ステートメントの指定 SELECT ] 画面に達すると、 の既定 SELECTEmployeesTableAdapter ステートメントが既に読み込まれます。 句に をWHERE追加するだけです。 WHERE DATEPART(m, HireDate) = @Month DATEPART は、型の特定の datetime 日付部分を返す T-SQL 関数です。この場合は、 を使用して DATEPART 列の月を HireDate 返します。

HireDate 列が <span class=@HiredBeforeDate Parameter" /> 以下の行のみを返します

図 3: 列が HireDate パラメーター以下 @HiredBeforeDate の行のみを返します (フルサイズの画像を表示する場合にクリックします)

最後に、 メソッド名と GetDataBy メソッド名をそれぞれ と GetEmployeesByHiredDateMonthFillByHiredDateMonth変更FillByします。

FillBy と GetDataBy よりも適切なメソッド名を選択する

図 4: [より適切なメソッド名] FillByGetDataBy を選択します (クリックするとフルサイズの画像が表示されます)

[完了] をクリックしてウィザードを完了し、DataSet のデザイン 画面に戻ります。 には EmployeesTableAdapter 、指定した月に採用された従業員にアクセスするための新しい一連のメソッドが含まれるようになりました。

DataSet のデザイン サーフェイスに新しいメソッドが表示される

図 5: DataSet のデザイン サーフェイスに新しいメソッドが表示される (フルサイズの画像を表示する をクリックします)

手順 2: メソッドをGetEmployeesByHiredDateMonth(month)ビジネス ロジック レイヤーに追加する

アプリケーション アーキテクチャではビジネス ロジックとデータ アクセス ロジックに別のレイヤーを使用するため、指定した日付より前に採用された従業員を取得するために DAL を呼び出すメソッドを BLL に追加する必要があります。 ファイルを EmployeesBLL.vb 開き、次のメソッドを追加します。

<System.ComponentModel.DataObjectMethodAttribute _
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
    As Northwind.EmployeesDataTable
    Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function

このクラスの他のメソッドと同様に、 GetEmployeesByHiredDateMonth(month) DAL を呼び出して結果を返します。

手順 3: 今月の採用記念日を持つ従業員を表示する

この例の最後の手順は、採用記念日が今月である従業員を表示することです。 まず、フォルダー内のページに ProgrammaticParams.aspx GridView を BasicReporting 追加し、新しい ObjectDataSource をデータ ソースとして追加します。 に設定された クラスをEmployeesBLL使用するように ObjectDataSource をSelectMethodGetEmployeesByHiredDateMonth(month)構成します。

EmployeesBLL クラスを使用する

図 6: クラスを使用する EmployeesBLL (クリックするとフルサイズの画像が表示されます)

GetEmployeesByHiredDateMonth(month) メソッドから選択します

図 7: メソッドからを選択します GetEmployeesByHiredDateMonth(month) (フルサイズの画像を表示する場合は、ここをクリックします)

最後の画面では、パラメーター値のソースを month 指定するように求められます。 この値はプログラムで設定するため、[パラメーター ソース] は既定の [なし] オプションに設定したままにして、[完了] をクリックします。

[パラメーター ソース] を [なし] のままにします

図 8: パラメーター ソースは [なし] のままにします (フルサイズの画像を表示する場合はクリックします)

これにより、ObjectDataSource SelectParameters のコレクションに、値が指定されていないオブジェクトが作成Parameterされます。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
    <SelectParameters>
        <asp:Parameter Name="month" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

この値をプログラムで設定するには、ObjectDataSource Selecting のイベントのイベント ハンドラーを作成する必要があります。 これを行うには、デザイン ビューに移動し、ObjectDataSource をダブルクリックします。 または、ObjectDataSource を選択し、プロパティ ウィンドウに移動し、稲妻アイコンをクリックします。 次に、イベントの横にあるテキスト ボックスをダブルクリックするか、使用する Selecting イベント ハンドラーの名前を入力します。 3 番目のオプションとして、ページの分離コード クラスの上部にある 2 つのドロップダウン リストから ObjectDataSource とその Selecting イベントを選択して、イベント ハンドラーを作成できます。

[プロパティ] ウィンドウで [Lightning Bolt] アイコンをクリックして、Web コントロールのイベントを一覧表示します

図 9: [プロパティ] ウィンドウの [Lightning Bolt] アイコンをクリックして Web コントロールのイベントを一覧表示する

3 つの方法はすべて、ObjectDataSource Selecting のイベントの新しいイベント ハンドラーをページの分離コード クラスに追加します。 このイベント ハンドラーでは、 を使用してe.InputParameters(parameterName)パラメーター値の読み取りと書き込みを行うことができます。ここでparameterName、 は タグ内<asp:Parameter>の 属性のName値です (InputParametersコレクションは、 のように、e.InputParameters(index)ordinally にインデックスを付けることもできます)。 パラメーターを現在の month 月に設定するには、イベント ハンドラーに次を Selecting 追加します。

Protected Sub ObjectDataSource1_Selecting _
    (sender As Object, e As ObjectDataSourceSelectingEventArgs) _
        Handles ObjectDataSource1.Selecting
    e.InputParameters("month") = DateTime.Now.Month
End Sub

ブラウザーからこのページにアクセスすると、今月 (3 月) に 1994 年から会社に勤務している 1 人の従業員のみが採用されていることがわかります。

今月の記念日が表示されている従業員

図 10: 今月の記念日が表示されている従業員 (クリックするとフルサイズの画像が表示されます)

まとめ

ObjectDataSource のパラメーターの値は、通常、コード行を必要とせずに宣言的に設定できますが、プログラムでパラメーター値を設定するのは簡単です。 必要なのは、ObjectDataSource の イベントのイベント ハンドラーを作成することです。このハンドラーは、基になるオブジェクトの Selecting メソッドが呼び出される前に発生し、コレクションを介して 1 つ以上のパラメーターの値を InputParameters 手動で設定します。

このチュートリアルでは、「基本的なレポート」セクションを終了します。 次のチュートリアルでは、「フィルター処理と Master-Details シナリオ」セクションを開始します。ここでは、訪問者がデータをフィルター処理し、マスター レポートから詳細レポートにドリルダウンできるようにする手法について説明します。

プログラミングに満足!

著者について

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

特別な感謝

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