Microsoft.Reporting.WebFormsClient.ReportViewer クラス
ReportViewer Web サーバー コントロールのクライアント側のプログラミング用のプロパティおよびメソッドを提供します。
ReportViewer Web サーバー コントロールは、このクラスのインスタンスをハンドルとしてクライアント ブラウザー内で作成して、クライアント側コントロールとプログラムでやり取りできるようにします。このインスタンスを使用すると、サーバーに対するポストバックを最小限に抑えながら、クライアント側コントロールの動作をカスタマイズできます。
名前空間:Microsoft.Reporting.WebFormsClient
構文
var v = $find(viewerId);
メンバー
説明
ReportViewer クラスのインスタンスは直接作成しません。代わりに、ReportViewer インスタンスにアクセスします。ReportViewer インスタンスは、クライアント ブラウザーで Web サーバー コントロールが描画されるたびに作成され、ブラウザーで Web ページが開かれていて Web サーバー コントロールが再描画されない限り持続します。ReportViewer Web サーバー コントロールが UpdatePanel コントロール内に配置されている場合、ReportViewer インスタンスは、部分ページ更新によって更新パネルがクライアント ブラウザー内で更新されるたびに破棄されて再作成されます。
ReportViewer インスタンスにアクセスするには、Sys.Application.findComponent メソッドを使用するか、または $find ショートカットと ReportViewer インスタンスの ID の組み合わせを使用します。たとえば、次に示す ASP.NET ページ スニペットは、ClientCode.js JavaScript ファイルを ScriptManager コントロールに登録します。次に、ClientCode.js ファイルは、rezoom メソッドを定義します。このメソッドは、ReportViewer Web サーバー コントロールのクライアント側 ID を使用して ReportViewer インスタンスにアクセスするために $find メソッドを使用します。スクリプト参照を ScriptManager コントロールに追加することで、Microsoft AJAX Library の読み込みの後に、登録されたスクリプトが実行されることが保証されます。
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="ClientCode.js" />
</Scripts>
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote">
<ServerReport ReportPath="/AdventureWorks 2008 Sample Reports/Company Sales 2008"
ReportServerUrl="http://<servername>/reportserver" />
</rsweb:ReportViewer>
<asp:TextBox ID="TextBox1" runat="server" onchange="rezoom(value)"></asp:TextBox>
ClientCode.js のコードを次に示します。ほとんどの場合、viewerID 変数の値は、ASP.NET ページ内の Web サーバー コントロールの ID です。ASP.NET スニペットでは、"ReportViewer1" が該当します。信頼できる方法でクライアント側 ID を取得するには、Web サーバー コントロールの ClientID プロパティを使用する必要があります。
function rezoom(level) {
var viewer = $find("ReportViewer1");
if (!viewer.get_isLoading() && viewer.get_zoomLevel() != level)
viewer.set_zoomLevel(level);
}
ReportViewer インスタンスによってスローされる例外
Web ページがポストバックを実行しているとき、または、クライアント側コントロールがコンテンツを読み込んでいるときに、ReportViewer インスタンスのメソッドまたはプロパティにアクセスすると、"レポートまたはページが更新中です。現在のアクションが完了するまでお待ちください。" というメッセージの例外が発生します。isLoading プロパティを使用すると、レポートまたはページが更新中であるかどうかと、メソッドとプロパティにアクセスできるかどうかを確認できます。このプロパティは例外をスローしません。
Web ページまたはクライアント側コントロールがポストバックを実行していない場合、一連のメソッドではレポートが読み込まれている必要があります。読み込まれているレポートがない場合にこれらのメソッドを呼び出すと、例外が発生し、"読み込まれているレポートがないため、操作を実行できません。" というメッセージの例外が発生します。これらのメソッドを以下に示します。これらのメソッドを使用する前に、reportAreaContentType プロパティを使用して、レポート領域にレポート ページが含まれているかどうかを確認してください。
Microsoft.Reporting.WebFormsClient.ReportViewer.invokePrintDialog メソッド
Microsoft.Reporting.WebFormsClient.ReportViewer.exportReport メソッド
Microsoft.Reporting.WebFormsClient.ReportViewer.findNext メソッド
プロパティ変更イベントの処理
プロパティが変更されたときに通知されるようにするには、Sys.Component.propertyChanged イベントにイベント ハンドラーを登録します。これは、ReportViewer インスタンスの基本クラスのイベントです。たとえば、次のコードは、zoomLevel プロパティの値に制限を適用するイベントを登録します。ScriptManager コントロールに次の JavaScript コードのスクリプト参照を追加できます。
Sys.Application.add_load(function () {
$find(viewerID).add_propertyChanged(viewerPropertyChanged);
});
function viewerPropertyChanged(sender, e) {
if (e.get_propertyName() == "zoomLevel") {
var viewer = $find(viewerID);
if (!viewer.get_isLoading() && viewer.get_zoomLevel() < 20) {
viewer.set_zoomLevel(20);
alert("Reset zoomLevel to 20.");
}
}
}
add_propertyChanged メソッドの前にプロパティの変更が発生した場合、イベント ハンドラーは呼び出されません。イベントが期待どおりに処理されるように、add_propertyChanged メソッドを適切に配置してください。ほとんどのシナリオでは、上のコード例に示すように、Sys.Application.load イベントのイベント ハンドラーの中で propertyChanged を登録することができます。ただし、クライアント側コントロールは load イベント内のコードも実行するため、AJAX クライアント側フレームワークが add_load ハンドラーを実行する順序によっては、自分で配置した add_load ハンドラーが実行される前に load イベント内の add_load ハンドラーによって対象のプロパティが変更される場合があります。すべてのプロパティの変更を確実に処理するには、Sys.Application.init イベントのイベント ハンドラーで propertyChanged を登録します。
関連項目
概念
Microsoft.Reporting.WebFormsClient 名前空間