ViewState と CrystalReportViewer オブジェクト モデルの維持
ViewState とは
ViewState は、ビューつまり Web フォームの状況を維持するために ASP.NET で使用される、ブラウザ ベースのアプローチです。主な機能は、Web コントロールの維持をサポートすることです。
Web コントロールは Web サーバー コントロールとも呼ばれ、Visual Basic に導入された Windows コントロールをモデルにしています。Windows コントロールは、テキスト フィールド、ボタン、またはデータ テーブルなどの表示機能の一部を、フォーム上にカプセル化するオブジェクトです。
Web コントロールは、Windows コントロールと類似しています。Windows コントロールと同様、Web コントロールは 2 つのレベルで機能します。Web ページ内と、Web ページをサポートする分離コード クラス内です。Windows フォームの従来のコントロールと同様に、Web コントロールは個々の表示機能を、Button、TextField、DropDownList、DataGrid 等の GUI オブジェクトにカプセル化します。分離コード クラスでは、これらの同じコントロールはクラスとして並列になり、プロパティとメソッドを表示します。
Web ページが Windows フォームと異なる点は、Web ページは処理状況が意識されない環境にあることです。したがって、ページを再ロードする際、Web ページの状況を保存するために、ある種の維持機能が必要となります。
ViewState は Web ページでのコントロールの状況を維持し、同様に Session はサーバー上でインスタンス化されたオブジェクトの状況を維持します。
注 |
---|
ViewState はすべての Web コントロールの状況を自動的に維持します。これは、ViewState がコントロールの EnableViewState プロパティ(デフォルトで True)を基準にして各コントロールを格納することにより実現します。 |
ViewState がページ上の Web コントロールからのデータ状況を保存するため、ページがブラウザと Web サーバーの間で転送されるたびに、ViewState オブジェクト全体がページ内に含まれる必要があります。これを実現するには、ViewState オブジェクト全体を文字列として暗号化し、次にこの文字列をページ上の非表示形式タグの値に配置します。たとえば、1 つのボタン コントロールだけを含む ASP.NET Web ページの ViewState には、以下の HTML コードがあります。
<input type="hidden" name="__VIEWSTATE"
value="dDwtNTMwNzcxMzI0Ozs+I7GfLyg3p44eTLFCiVEiRKUBzFw=" />
ViewState は、文字列形式に変換された情報だけを保存します。
CrystalReportViewer コントロールのレポート表示の維持
CrystalReportViewer コントロールは、Crystal レポートを表示する役割を果たします。レポートの表示を操作するツールバーとツリー ビューと共に、レポートをページ上の html に表示します。ツールバーには、拡大率の調整、次ページへの移動、印刷、エクスポートなどのボタンが含まれます。ツリー ビューを展開すると、ネストされたデータのグループが表示されます。
ViewState はコントロール情報を維持します。つまり、CrystalReportViewer コントロールのページ間で再ロードがあっても、すべてのレポート表示情報の状況(ツールバーとツリー ビュー イベントを含む)が維持されます。
たとえば、ユーザーがレポートの 3 ページ目を参照していて、CrystalReportViewer コントロールのツールバーで[次のページ]ボタンをクリックしても、ViewState は次のどちらの情報についてもその状況を維持します。
- 現在のページ番号。
- [次のページ]ボタンの状況(クリックされた)
ページの再ロード中に、ViewState は CrystalReportViewer コントロールを3 ページに復元し、次のページへ移動するイベント クリックも復元します。この結果、コントロールによりレポートが 4 ページ目に移動されます。
CrystalReportViewer コントロールのオブジェクト モデルの維持
CrystalReportViewer コントロールは、追加的な役割を果たします。レポートの表示だけでなく、限定的なオブジェクト モデル(CrystalReportViewer コントロール クラスに含まれる)としても機能します。この限定的なオブジェクト モデルは、レポートとのプログラムによる対話に使用することができます。
ViewState は、次のどちらの機能の状況も維持します。
- レポートの表示
- CrystalReportViewer オブジェクト モデル
しかし、通常 CrystalReportViewer オブジェクト モデルの使用はお勧めしません。より幅広い機能を持つ、ReportDocument オブジェクト モデルを推奨します。この代替オブジェクト モデルは、コントロールに含まれませんが、SDK のクラス ライブラリの一部です。
注 |
---|
詳細については、「プロジェクトに適したオブジェクト モデルの選択」を参照してください。 |
維持機能の共有
CrystalReportViewer コントロールを使用してレポートの表示とオブジェクト モデルの両方の役割を実行する場合は、ViewState はどちらも維持できるため、維持機能を追加する必要はありません。
注 |
---|
この例となるのが、CrystalReportViewer コントロールをファイル ディレクトリ パスにバインドするシナリオです。詳細については、「コードによるファイル ディレクトリ パスへのバインド」を参照してください。 |
ただし、CrystalReportViewer コントロールをレポートの表示だけに選択し、コントロールを ReportDocument などの外部のオブジェクト モデルにバインドする場合は、外部のオブジェクト モデルを維持するために別の維持機能が必要になります。一般に、第 2 の永続機能として、Session(場合によっては Cache)を使用します。
関連項目
-
この節では、Crystal Reports SDK の基本について説明します。基本を理解することにより、プロジェクトの構成についての計画を立てやすくなります。