次の方法で共有


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 はサーバー上でインスタンス化されたオブジェクトの状況を維持します。

Note

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 のクラス ライブラリの一部です。

Note

詳細については、「プロジェクトに適したオブジェクト モデルの選択」を参照してください。

維持機能の共有

CrystalReportViewer コントロールを使用してレポートの表示とオブジェクト モデルの両方の役割を実行する場合は、ViewState はどちらも維持できるため、維持機能を追加する必要はありません。

Note

この例となるのが、CrystalReportViewer コントロールをファイル ディレクトリ パスにバインドするシナリオです。詳細については、「コードによるファイル ディレクトリ パスへのバインド」を参照してください。

ただし、CrystalReportViewer コントロールをレポートの表示だけに選択し、コントロールを ReportDocument などの外部のオブジェクト モデルにバインドする場合は、外部のオブジェクト モデルを維持するために別の維持機能が必要になります。一般に、第 2 の永続機能として、Session(場合によっては Cache)を使用します。

関連項目