ObjectDataSource のパラメーター値をプログラムで設定する (C#)
このチュートリアルでは、1 つの入力パラメーターを受け取り、データを返すメソッドを DAL と BLL に追加する方法について説明します。 この例では、このパラメーターをプログラムで設定します。
はじめに
前のチュートリアルで説明したように、ObjectDataSource のメソッドにパラメーター値を宣言的に渡すためのオプションがいくつかあります。 パラメーター値がハードコーディングされている場合、ページ上の Web コントロールから取得された場合、またはデータ ソース Parameter
オブジェクトによって読み取り可能な他のソースにある場合 (たとえば、コード行を記述せずに、その値を入力パラメーターにバインドできます)。
ただし、パラメーター値が、組み込みのデータ Parameter
ソース オブジェクトの 1 つによってまだ考慮されていないソースから取得される場合があります。 サイトでユーザー アカウントがサポートされている場合は、現在ログインしている訪問者のユーザー ID に基づいて パラメーターを設定できます。 または、ObjectDataSource の基になるオブジェクトのメソッドにパラメーター値を送信する前に、パラメーター値をカスタマイズする必要がある場合があります。
ObjectDataSource Select
のメソッドが呼び出されるたびに、ObjectDataSource は最初に Selecting イベントを発生させます。 その後、ObjectDataSource の基になるオブジェクトのメソッドが呼び出されます。 これで ObjectDataSource の Selected イベント が発生します (図 1 は、この一連のイベントを示しています)。 ObjectDataSource の基になるオブジェクトのメソッドに渡されるパラメーター値は、イベントのイベント ハンドラー Selecting
で設定またはカスタマイズできます。
図 1: ObjectDataSource とSelecting
イベントは、基になるオブジェクトのSelected
メソッドが呼び出される前と後に発生します (フルサイズの画像を表示する 場合は、ここをクリックします)
このチュートリアルでは、 型int
の単一の入力パラメーター Month
を受け取り、指定した Month
に雇用記念日を持つ従業員が設定されたオブジェクトを返すEmployeesDataTable
メソッドを DAL と BLL に追加する方法について説明します。 この例では、現在の月に基づいてプログラムでこのパラメーターを設定し、"今月の従業員の記念日" の一覧を示します。
それでは作業を始めましょう。
手順 1: メソッドを に追加するEmployeesTableAdapter
最初の例では、指定した月に発生した HireDate
従業員を取得する手段を追加する必要があります。 アーキテクチャに従ってこの機能を提供するには、まず、 で EmployeesTableAdapter
適切な SQL ステートメントにマップする メソッドを作成する必要があります。 これを実現するには、まず Northwind 型の DataSet を開きます。 ラベルを右クリックし、[クエリの EmployeesTableAdapter
追加] を選択します。
図 2: に新しいクエリを追加する EmployeesTableAdapter
(クリックするとフルサイズの画像が表示されます)
行を返す SQL ステートメントを追加することを選択します。 [ステートメントの指定] 画面に SELECT
達すると、 の既定 SELECT
の EmployeesTableAdapter
ステートメントが既に読み込まれます。 句に をWHERE
追加するだけです。 WHERE DATEPART(m, HireDate) = @Month
DATEPART は、型の特定の日付部分datetime
を返す T-SQL 関数です。この場合、列のHireDate
月を返すために を使用DATEPART
しています。
図 3: 列が HireDate
パラメーター以下 @HiredBeforeDate
の行のみを返します (フルサイズの画像を表示する 場合はクリックします)
最後に、 メソッド名と GetDataBy
メソッド名をそれぞれ および GetEmployeesByHiredDateMonth
にFillByHiredDateMonth
変更FillBy
します。
図 4: 次よりも FillBy
適切なメソッド名を選択します GetDataBy
(クリックするとフルサイズの画像が表示されます)
[完了] をクリックしてウィザードを完了し、DataSet のデザイン 画面に戻ります。 には EmployeesTableAdapter
、指定した月に採用された従業員にアクセスするための新しい一連のメソッドが含まれるようになりました。
図 5: DataSet のデザイン サーフェイスに新しいメソッドが表示される (フルサイズの画像を表示する をクリックします)
手順 2: ビジネス ロジック レイヤーにメソッドを追加GetEmployeesByHiredDateMonth(month)
する
アプリケーション アーキテクチャでは、ビジネス ロジックとデータ アクセス ロジックに別のレイヤーを使用するため、指定した日付より前に採用された従業員を取得するために DAL を呼び出すメソッドを BLL に追加する必要があります。 ファイルを EmployeesBLL.cs
開き、次のメソッドを追加します。
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
return Adapter.GetEmployeesByHiredDateMonth(month);
}
このクラスの他のメソッドと同様に、 GetEmployeesByHiredDateMonth(month)
DAL を呼び出して結果を返します。
手順 3: 今月の採用記念日を持つ従業員を表示する
この例の最後の手順は、採用記念日が今月である従業員を表示することです。 まず、フォルダー内のページに GridView をProgrammaticParams.aspx
BasicReporting
追加し、新しい ObjectDataSource をデータ ソースとして追加します。 に設定された クラスをEmployeesBLL
使用するように ObjectDataSource をSelectMethod
GetEmployeesByHiredDateMonth(month)
構成します。
図 6: クラスを使用する EmployeesBLL
(クリックするとフルサイズの画像が表示されます)
図 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
テキストボックスをダブルクリックするか、使用するイベント ハンドラーの名前を入力します。
図 9: [プロパティ] ウィンドウの [稲妻] アイコンをクリックして Web コントロールのイベントを一覧表示する
どちらの方法でも、ObjectDataSource Selecting
のイベントの新しいイベント ハンドラーがページの分離コード クラスに追加されます。 このイベント ハンドラーでは、 を使用してe.InputParameters[parameterName]
パラメーター値の読み取りと書き込みを行うことができます。ここでparameterName
、 は タグ内<asp:Parameter>
の 属性のName
値です (InputParameters
コレクションは、 のようにe.InputParameters[index]
、序数でインデックスを作成することもできます)。 パラメーターを現在の month
月に設定するには、イベント ハンドラーに次を Selecting
追加します。
protected void ObjectDataSource1_Selecting
(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["month"] = DateTime.Now.Month;
}
ブラウザーからこのページにアクセスすると、今月 (3 月) に 1994 年から会社に勤務している Laura Callahan が 1 人だけ採用されていることがわかります。
図 10: 今月の記念日が表示されている従業員 (フルサイズの画像を表示する をクリックします)
まとめ
ObjectDataSource のパラメーターの値は通常、コード行を必要とせずに宣言的に設定できますが、パラメーター値はプログラムで簡単に設定できます。 必要なのは、ObjectDataSource のイベントのイベント ハンドラーを作成するだけで、基になるオブジェクトの Selecting
メソッドが呼び出される前に発生し、コレクションを介して 1 つ以上のパラメーターの値を InputParameters
手動で設定します。
このチュートリアルでは、「基本的なレポート」セクションを終了します。 次のチュートリアルでは、「フィルター処理と Master-Details シナリオ」セクションを開始します。ここでは、訪問者がデータをフィルター処理し、マスター レポートから詳細レポートにドリルダウンできるようにする手法について説明します。
幸せなプログラミング!
著者について
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をドロップしてください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示