連載:VS 2005でいってみようDBプログラミング

第12回 DBプログラミング 7つのヒント
− 同時実行制御からASP.NET AJAXまで −

山田 祥寛(http://www.wings.msn.to/
2007/01/27
Page1 Page2 Page3 Page4

Hint 3. GridViewコントロールのページング/ソート処理を高速化しよう

 GridViewコントロールが標準で提供するページング/ソート処理は、処理要求の都度、サーバ側へのポストバックが実行されることから、オーバーヘッドの大きな処理です。しかし、ASP.NET 2.0ではこれらページング/ソート処理を「クライアント・コールバック機能」で処理する方法を提供しています。

 クライアント・コールバック機能とは、XML HTTP(=HTTPベースでXML形式のデータをやりとりする方法)によって実現されるコールバック処理のことで、これを利用すると、ポストバックのときのようにイベント処理のたびにページ全体をリフレッシュする必要がありません。

 イベント処理(この場合はページング/ソート処理)に際しても、必要なデータだけがサーバに送信され、処理結果だけがクライアントに送信されますので、当然、大きなページにもなれば、パフォーマンスの大幅な改善が期待できますし、ページのちらつきなども発生しない、というわけです。やや機能に制約こそあるものの、ASP.NET版の簡易Ajax機能といってもよいかもしれません*2

*2 Ajaxについては、別稿「枯れた新しいUI革命「Ajax」をASP.NETで活用する」を、クライアント・コールバック機能については、「.NET TIPS:[ASP.NET]ページを再読み込みせずにサーバと通信を行うには?」を、それぞれ参照してください。

 クライアント・コールバック機能を有効にする、といっても、そんなに大げさなことではありません。GridViewコントロールは、標準でクライアント・コールバック機能を提供するコントロールですので、本機能を有効にするにはEnableSortingAndPagingCallbacksプロパティをTrueに設定するだけです。

 以下に、クライアント・コールバック機能を有効にしたGridViewコントロールの実行例を見てみましょう(配布サンプルでは、GridViewCallback.aspxから実行できます)。



「書名」をクリック

図4 クライアント・コールバック機能でソート処理を実行した結果
GridViewコントロールの上部の現在時刻表示が変化していないことからページ全体がリフレッシュされていないことを確認できる。

 ここでは、ページ全体がリフレッシュされていないことを確認するために、GridViewコントロールの上部に現在時刻を表示するようにしています。確かに、処理の前後で、時刻表示が変更されていないことが確認いただけるはずです。

 このように便利で、手軽なクライアント・コールバック機能ですが、いくつかの制約もあります。

  • 使用ブラウザによっては正しく動作しない場合がある
  • グリッド上にTemplateField列や[選択]ボタンなど、コールバック機能をサポートしない列が含まれている場合にはエラーを発生

 これら条件に合致するようなケースでは、クライアント・コールバック機能は利用できませんので、注意してください。

Hint 4. Microsoft標準のAjax技術「ASP.NET AJAX」を利用しよう

 このように、ASP.NET 2.0標準のクライアント・コールバック機能は便利ではあるものの、機能上の制約から実際には適用できないという局面も多いはずです。

 それでは、クライアント環境にも依存せず、TemplateField列や[選択]ボタンなどを含むGridViewコントロール、あるいは、直接、クライアント・コールバック機能に対応していないDetailsView/FormViewコントロールなどのサーバ・コントロールにおいて、同じくクライアント・コールバック機能を実装するには、どのようにしたらよいのでしょうか。

 ここで登場するのが「ASP.NET AJAX」です。

 ASP.NET AJAXは、その名のとおり、マイクロソフトが無償提供するASP.NET 2.0対応Ajaxフレームワークです*3。ASP.NET AJAXを利用することで、ASP.NET 2.0が標準で提供するクライアント・コールバック機能に比べても、はるかに高度で本格的なAjax機能をアプリケーションに組み込むことが可能になります。

*3 厳密には、ASP.NET AJAXを利用できるのは、ASP.NET 2.0環境に制限されません。ASP.NET AJAXに含まれるクライアントサイド・フレームワークのみを切り出すことで、ASP.NET 2.0以外の環境(例えば、PHPやJava EEなどの環境)でもASP.NET AJAXの機能を利用できます。

 ASP.NET AJAXを利用した具体的なテクニックを紹介する前に、まずはASP.NET AJAXを利用するための準備を行っておくことにしましょう。

 ASP.NET AJAXは、ASP.NET 2.0の拡張フレームワーク(ライブラリ)ですので、利用するに当たっては、サーバ環境へのライブラリのインストールと、アプリケーション環境の構成変更が必要になります。

[1]ASP.NET AJAXのインストール・パッケージをダウンロードする

 ASP.NET AJAXは、以下の公式サイトから入手が可能です。

http://ajax.asp.net/

 本稿執筆時点(2007年1月24日)のASP.NET AJAXの最新バージョンは1.0で、ダウンロード可能なパッケージは以下のとおりです。

パッケージ名 概要
ASP.NET AJAX 1.0 ASP.NET AJAXの基本パッケージ
ASP.NET 2.0 AJAX Futures January CTP 基本パッケージからは外された開発中の機能(将来的には基本パッケージに追加の予定)
ASP.NET AJAX Control Toolkit ASP.NET AJAXをベースとしたサーバ・コントロール集
Sample Applications ASP.NET AJAXをベースとしたサンプル・アプリケーション
Microsoft AJAX Library ASP.NET AJAXから環境非依存の機能のみを切り出したパッケージ(非ASP.NET環境向け)
表3 ASP.NET AJAXで利用可能なパッケージ
ASP.NET AJAX Control ToolKitについては、この連載記事で詳説しています。興味のある方は併せて参照してください。

 通常、ASP.NET 2.0環境でASP.NET AJAXを利用するには、「ASP.NET AJAX 1.0(以降、ASP.NET AJAX)」だけをインストールしておけばよいでしょう。

 「ASP.NET 2.0 AJAX Futures January CTP」や「ASP.NET AJAX Control Toolkit」については利用したい機能に応じて適宜追加インストールするようにしてください(これらをインストールする場合にも、必ずあらかじめ基本パッケージをインストールしておく必要があります)。

 本稿ではまず最低限必要な「ASP.NET AJAX 1.0」をインストールした状態で解説を進めていくことにします。

[2]ASP.NET AJAXをインストールする

 ASP.NET AJAXをインストールするには、ダウンロードしたASPAJAXExtSetup.msiをダブルクリックするだけです。インストーラが起動しますので、指示に従って次に進めてください。途中何回か選択を求められる個所もありますが、通常はデフォルトのままで問題ないでしょう。

 インストールに成功すると、「C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v<バージョン番号>」フォルダにASP.NET AJAXの動作に必要なファイル群が作成され、VS 2005にはASP.NET AJAX対応アプリケーションを作成するための「ASP.NET AJAX-Enabled Web Site」テンプレートが追加されます。また、VS 2005のツールボックスに新たに[AJAX Extensions]というカテゴリが追加され、いくつかの拡張サーバ・コントロールが導入されていることも確認できるはずです。

図5 追加された「ASP.NET AJAX-Enabled Web Site」テンプレート

[3]アプリケーション構成を編集する

 ASP.NET AJAXをアプリケーション上で有効にするには、アプリケーション構成ファイル(Web.config)にいくつかの定義を追加する必要があります。

 先述した「ASP.NET AJAX-Enabled Web Site」テンプレートを利用すれば、デフォルトで必要な定義が追加されたWeb.configが用意されますが、本連載のように、すでにアプリケーション開発を進めてしまっており、Web.configも編集してしまっているようなケースでは、一からテンプレートを適用するのはあまり現実的ではありません。

 そこでここでは、先ほど紹介したインストール・フォルダ(「C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v<バージョン番号>」フォルダ)からASP.NET AJAX対応Web.configを現在のアプリケーションにコピーし、自分で追加した構成だけをあらためて追加することにします。

 ちなみに、コピーしたWeb.configに追加する構成は、以下の<connectionStrings>要素です。第2回でも述べたように、この構成がないと、既存のサンプル・アプリケーションも含めて、データベースへの接続を正しく実行できなくなってしまいますので注意してください。

</configSections>
<connectionStrings>
  <add name="myDb" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=;AttachDbFilename=|DataDirectory|\MyDB.mdf;Initial Catalog=;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
  <add name="AccessPasswd" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|Datadirectory|\MyDBPasswd.mdb;Persist Security Info=True;Jet OLEDB:Database Password=12345" providerName="System.Data.OleDb"/>
</connectionStrings>
<system.web>
リスト5 ASP.NET AJAX対応Web.configに必要な構成を追加(Web.config)


 INDEX
  Visual Studio 2005でいってみようDBプログラミング
  第12回 データベース・プログラミング 7つのヒント − 同時実行制御からASP.NET AJAXまで −
    1.Hint 1.競合の検出/Hint 2. 楽観的同時実行制御の問題点とその解決方法
  2.Hint 3. GridViewページング・ソート処理の高速化/Hint 4. 「ASP.NET AJAX」の利用
    3.Hint 5. UpdatePanelコントロールによる高速化/Hint 6. Timerコントロールによる更新
    4.Hint 7. データベース・キャッシングの活用
 
インデックス・ページヘ  「Visual Studio 2005でいってみようDBプログラミング」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間