Microsoft.Reporting.WebFormsClient.ReportViewer 클래스
ReportViewer 웹 서버 컨트롤의 클라이언트측 프로그래밍을 위한 속성과 메서드를 제공합니다.
ReportViewer 웹 서버 컨트롤은 클라이언트 브라우저에서 클라이언트측 컨트롤과 프로그래밍 방식으로 상호 작용하기 위한 핸들로 이 클래스의 인스턴스를 만듭니다. 이 인스턴스를 사용하여 서버에 대한 포스트백을 최소화하면서 클라이언트측 컨트롤의 동작을 사용자 지정할 수 있습니다.
네임스페이스:Microsoft.Reporting.WebFormsClient
구문
var v = $find(viewerId);
멤버
주의
ReportViewer 클래스의 인스턴스를 직접 만들지 않고, 대신 ReportViewer 인스턴스에 액세스합니다. ReportViewer 인스턴스는 웹 서버 컨트롤이 클라이언트 브라우저에서 렌더링될 때마다 만들어지고 웹 페이지가 브라우저에서 열려 있고 웹 서버 컨트롤이 렌더링되지 않는 한 유지됩니다. ReportViewer 웹 서버 컨트롤이 UpdatePanel 컨트롤 안에 배치되는 경우 부분 페이지 업데이트를 통해 업데이트 패널이 클라이언트 브라우저에서 새로 고쳐질 때마다 ReportViewer 인스턴스가 삭제되고 다시 만들어집니다.
ReportViewer 인스턴스에 액세스하려면 ReportViewer 인스턴스의 ID와 함께 $find 바로 가기나 Sys.Application.findComponent 메서드를 사용합니다. 예를 들어 아래의 ASP.NET 페이지 조각은 JavaScript 파일 ClientCode.js를 ScriptManager 컨트롤에서 등록합니다. ClientCode.js 파일은 ReportViewer 웹 서버 컨트롤의 클라이언트측 ID를 사용하여 ReportViewer 인스턴스에 액세스하기 위해 $find 메서드를 사용하는 rezoom 메서드를 정의합니다. 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 페이지에 있는 웹 서버 컨트롤의 ID입니다. ASP.NET 조각에서 이 값은 "ReportViewer1"입니다. 웹 서버 컨트롤의 ClientID 속성을 사용하여 클라이언트측 ID를 안정적으로 얻어야 합니다.
function rezoom(level) {
var viewer = $find("ReportViewer1");
if (!viewer.get_isLoading() && viewer.get_zoomLevel() != level)
viewer.set_zoomLevel(level);
}
ReportViewer 인스턴스에서 throw되는 예외
웹 페이지에서 포스트백을 수행하거나 클라이언트측 컨트롤이 콘텐츠를 로드하고 있을 때 ReportViewer 인스턴스의 메서드나 속성에 액세스하면 예외가 발생하고 "보고서 또는 페이지를 업데이트하고 있습니다. 현재 작업을 완료하는 동안 잠시 기다려 주십시오."라는 메시지가 표시됩니다. isLoading 속성을 사용하여 보고서나 페이지가 업데이트되고 있는지 여부와 메서드와 속성에 액세스할 수 있는지 여부를 확인할 수 있습니다. 이 속성은 예외를 throw하지 않습니다.
웹 페이지 또는 클라이언트측 컨트롤에서 포스트백을 수행하지 않을 때 메서드 집합을 사용하려면 보고서를 로드해야 합니다. 보고서가 로드되지 않을 경우 이러한 메서드를 호출하면 예외가 발생하고 "로드된 보고서가 없으므로 작업을 수행할 수 없습니다."라는 메시지가 표시됩니다. 이러한 메서드가 아래에 나와 있습니다. 이러한 메서드를 사용하기 전에 reportAreaContentType 속성을 사용하여 보고서 영역에 보고서 페이지가 포함되어 있는지 여부를 확인할 수 있습니다.
Microsoft.Reporting.WebFormsClient.ReportViewer.invokePrintDialog 메서드
Microsoft.Reporting.WebFormsClient.ReportViewer.exportReport 메서드
Microsoft.Reporting.WebFormsClient.ReportViewer.findNext 메서드
속성 변경 이벤트 처리
속성이 변경될 때 알림을 받으려면 Sys.Component.propertyChanged 이벤트에 이벤트 처리기를 등록합니다. 이 이벤트는 ReportViewer 인스턴스에 대한 기본 클래스의 이벤트입니다. 예를 들어 다음 코드에서는 zoomLevel 속성 값을 제한하기 위해 이벤트를 등록합니다. 다음 JavaScript 코드에 대한 스크립트 참조를 ScriptManager 컨트롤에서 추가할 수 있습니다.
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 처리기가 사용자가 관심을 갖고 있는 속성을 변경한 후 사용자의 add_load 처리기가 실행될 수도 있습니다. 모든 속성 변경이 처리되도록 하려면 Sys.Application.init 이벤트의 이벤트 처리기에서 propertyChanged에 등록하면 됩니다.
참고 항목
개념
Microsoft.Reporting.WebFormsClient 네임스페이스