.NET TIPS [ASP.NET]データアクセス・コンポーネントを拡張するには?[2.0、3.0、3.5、C#、VB]山田 祥寛2009/05/07 |
|
|
「TIPS:[ASP.NET]GridViewコントロールにオブジェクトをバインドするには?」(以下、前回のTIPS)では、ObjectDataSourceコントロールを使ってデータアクセス・コンポーネントをGridViewコントロールにバインドする方法について解説した。もっとも、そこで紹介したサンプルでは、あえてデータアクセス・コンポーネントを利用する意味は見えにくかったかもしれない。ウィザード・ベースで生成できるレベルのコマンドであれば、SqlDataSourceコントロールでも同等のことが実現できるからだ。
しかし、データアクセス・コンポーネントを利用する意味は、ここからだ。本稿では、データアクセス・コンポーネントを拡張して、独自の機能を追加する方法を紹介する。データアクセス・コンポーネントに独自のメソッドを追加することで、ウィザードだけでは賄えない複雑な要件も実現できるようになる。
例えば、ここでは「TIPS:[ASP.NET]GridViewコントロールにストアドプロシージャの結果を反映させるには?」で紹介したサンプルStored.aspxを、データアクセス・コンポーネントを使って書き換えてみよう。以下では、すでに作成済みのサンプルからの差分の手順のみを解説する。
選択された価格帯の書籍だけを一覧表示する(本稿で作成するサンプルの実行結果) |
1. 拡張のためのコードを記述する
ウィザードで自動生成したデータアクセス・コンポーネント(厳密にはテーブル・アダプタ)を拡張するには、部分クラス(Partialクラス)を使用する。部分クラスを利用することで、データアクセス・コンポーネントにより自動生成されるクラス定義のファイルとは完全に切り離して、別のファイルにそのクラスを拡張するコードを記述できる。部分クラスであることを宣言するには、クラス定義の先頭に「partial」(Visual Basicでは「Partial」)を付与する。
それではさっそく、具体的なコードを見てみよう。ここでは、引数として価格(変数price)を受け取り、変数priceが0以下である場合にはすべてのレコードを、0より大きい場合には「price - 1000以上、price未満」のレコードのみを、それぞれbookテーブルから取り出すGetInfosByPriceメソッドを定義している。
|
||
テーブル・アダプタを拡張するための部分クラス(上がbookTableAdapter.cs、下がbookTableAdapter.vb) |
全体的なコードの流れはリスト内のコメントを参照いただくとして、ここではポイントとなる部分に注目してみよう。
(1)自動生成されたクラスの名前
前回のTIPSで述べたように、自動生成されたテーブル・アダプタは「<.xsdファイル名>TableAdapters」名前空間に属し、クラス名は「<テーブル名>TableAdapter」である。
部分クラスを定義するには、(当然)片割れとなるクラスと同じ名前空間に属しており、同じクラス名である必要があるので、ここではBookTableAdapters名前空間のbookTableAdapterクラスを定義する。
(2)メソッドの種類を宣言するDataObjectMethod属性
DataObjectMethod属性(System.ComponentModel名前空間)を利用することで、メソッドの種類を宣言できる。具体的には、第1引数で「メソッドの種類(SELECT、UPDATE、DELETEなど)」を、第2引数で「デフォルトのメソッドであるか」を、それぞれ指定できる。DataObjectMethod属性の宣言は必須ではないが、明示的に指定しておくことで、データソース構成ウィザードでも対応するメソッドが自動的に認識されるようになる。通常は、きちんと宣言しておくのが望ましいだろう。
(3)メソッドの戻り値はDataTableオブジェクト
メソッドの戻り値は、型付きデータテーブル(DataTableオブジェクト)として返す必要がある。前回のTIPSで述べたように、ここでは型付きデータセットとして「Book」が、型付きデータテーブルとして「bookDataTable」が生成されているはずだ。
型付きデータテーブルは「型付きデータセット名.テーブル名」で取得できる。ここでは、テーブル・アダプタ経由で取得した結果セットの内容を型付きデータテーブルに流し込んでいる。
2. GridViewコントロールにデータをバインドする
作成した部分クラスを保存したら、これをGridViewコントロールにバインドしてみよう。前回のTIPSで作成済みのStored.aspxに配置したGridViewコントロールのタスク・メニューを開き、[データソースの選択]から[<新しいデータソース>]を選択する。データソース構成ウィザードが開くので、以下の表の要領で必要な情報を設定する。
データアクセス・コンポーネントをバインドする場合の基本的な手順については、前回のTIPSも併せてご参照いただきたい。
項目 | 概要 |
データの種類 | オブジェクト |
データソースID | ods |
ビジネス・オブジェクトの選択 | BookTableAdapters.bookTableAdapter |
データ・メソッドの定義(SELECT) | GetInfosByPrice(Int32 price)、戻り値bookDataTable |
データソース構成ウィザードの設定 |
ウィザードの最後に[パラメータの定義]ダイアログが表示されるが、ここではSELECTメソッド(GetInfosByPriceメソッド)の引数priceに対して、RadioButtonListコントロール「rdoExp」を紐付けておこう。これによって、引数priceに対して、RadioButtonListコントロールの選択値(SelectedValueプロパティ)がバインドされるわけだ。
[パラメータの定義]ダイアログ |
以上の手順を終えたら、さっそく、サンプルを実行してみよう。冒頭の画面のように、ラジオボタンの条件指定に従ってグリッド表のデータが絞り込み表示されれば、確かにデータアクセス・コンポーネントと部分クラスは正しくバインドされている。
利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:GridViewコントロール 使用ライブラリ:GridViewコントロール 関連TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには? 関連TIPS:[ASP.NET]GridViewコントロールにストアドプロシージャの結果を反映させるには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|