다음을 통해 공유


Microsoft.Reporting.WebFormsClient.ReportViewer 클래스

ReportViewer 웹 서버 컨트롤의 클라이언트측 프로그래밍을 위한 속성과 메서드를 제공합니다.

ReportViewer 웹 서버 컨트롤은 클라이언트 브라우저에서 클라이언트측 컨트롤과 프로그래밍 방식으로 상호 작용하기 위한 핸들로 이 클래스의 인스턴스를 만듭니다. 이 인스턴스를 사용하여 서버에 대한 포스트백을 최소화하면서 클라이언트측 컨트롤의 동작을 사용자 지정할 수 있습니다.

네임스페이스:Microsoft.Reporting.WebFormsClient

상속:Sys.Component

구문

var v = $find(viewerId);

멤버

이름

설명

Microsoft.Reporting.WebFormsClient.ReportViewer.exportReport 메서드

보고서를 지정된 형식으로 내보냅니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.find 메서드

보고서 영역의 현재 보고서에서 문자열을 검색합니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.findNext 메서드

보고서에서 다음 검색 결과를 찾습니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.invokePrintDialog 메서드

인쇄 대화 상자를 시작합니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.recalculateLayout 메서드

ReportViewer의 레이아웃을 다시 계산합니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.refreshReport 메서드

보고서를 새로 고칩니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.documentMapCollapsed 속성

문서 구조를 축소할지 여부를 나타내는 Boolean 값을 가져오거나 설정합니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.isLoading 속성

웹 페이지에서 포스트백을 수행하거나 클라이언트측 컨트롤이 콘텐츠를 로드하고 있는지 여부를 나타내는 Boolean 값을 가져옵니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.promptAreaCollapsed 속성

매개 변수 프롬프트 영역을 축소할지 여부를 나타내는 Boolean 값을 가져오거나 설정합니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.reportAreaContentType 속성

보고서 영역의 현재 콘텐츠 형식을 나타내는 Microsoft.Reporting.WebFormsClient.ReportAreaContent 열거형 값을 가져옵니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.reportAreaScrollPosition 속성

보고서 영역의 스크롤 위치를 나타내는 Sys.UI.Point 개체를 가져오거나 설정합니다.

Microsoft.Reporting.WebFormsClient.ReportViewer.zoomLevel 속성

현재 확대/축소 수준을 나타내는 string을 가져오거나 설정합니다.

주의

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 속성을 사용하여 보고서 영역에 보고서 페이지가 포함되어 있는지 여부를 확인할 수 있습니다.

속성 변경 이벤트 처리

속성이 변경될 때 알림을 받으려면 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 네임스페이스

관련 자료

AJAX Client Life-Cycle Events

Sys.Application.load Event