다음을 통해 공유


ReportDocument로 업캐스팅된 포함 보고서 클래스에 바인딩

개체 모델

이 보고서 바인딩 시나리오에는 "ReportDocument 개체 모델을 통한 보고서 바인딩"이 사용됩니다.

보고서 위치

보고서는 프로젝트에 포함됩니다.

Note참고

이 설명서의 이전 버전에서는 포함 보고서를 "강력한 형식의 보고서"라고 지칭했습니다. 이제는 Visual Studio 프로젝트에 추가되거나 가져온 보고서를 나타내기 위해 "포함"이라는 용어를 사용합니다.

설명

이 보고서 바인딩 시나리오는 "포함 보고서 클래스에 바인딩" 시나리오에서 확장된 것입니다. 이 시나리오에서는 각 포함 보고서를 개별적으로 코딩하지 않고 하나의 공통 코드 집합을 사용하는 프로젝트에 여러 개의 포함 보고서를 바인딩합니다.

이 보고서 바인딩 시나리오에서는 여러 개의 포함 보고서를 프로젝트에 추가합니다. 그러나 포함 보고서를 CrystalReportViewer 컨트롤에 직접 바인딩하지는 않습니다. 대신, 선택 기준을 사용하는 유틸리티 메서드를 실행하여 포함 보고서 중 하나를 선택합니다. 이 유틸리티는 보고서를 ReportDocument의 인스턴스로 업캐스팅합니다. 그런 다음 ReportDocument 인스턴스가 컨트롤에 바인딩됩니다.

Note참고

ReportDocument는 모든 포함 보고서가 상속하는 기본 클래스입니다. 따라서 모든 포함 보고서는 ReportDocument로 업캐스팅할 수 있습니다.

장점

  • 리팩터링을 통해 코드를 쉽게 작성할 수 있습니다. 보고서 바인딩 코드의 공통 집합을 통해 여러 포함 보고서 중 하나와 상호 작용할 수 있습니다. 이전 시나리오에서는 포함 보고서를 개별적으로 직접 코딩해야 하므로 작업 부담이 컸습니다.
  • 코드를 공유하여 코딩 작업량을 줄일 수 있습니다. ReportDocument 개체 모델과 완전하게 상호 작용할 수 있도록 ReportDocument의 인스턴스에 대해 추가 코드를 작성할 수 있습니다. 해당하는 모든 코드를 한 번만 작성하면 이후에 ReportDocument 인스턴스로 업캐스팅되는 각 포함 보고서에 대해 코드를 반복하여 사용할 수 있습니다.
  • 이외에도 "포함 보고서 클래스에 바인딩"의 모든 장점을 얻을 수 있습니다.

단점

  • 유지 관리에 더 많은 노력이 필요합니다. 보고서를 변경하면 응용 프로그램을 다시 컴파일하여 다시 배포해야 합니다.

ReportDocument로 업캐스팅된 포함 보고서 클래스에 바인딩하려면

Note참고

이 절차는 "프로젝트 설정"을 통해 생성된 프로젝트에서만 사용할 수 있습니다. 프로젝트 설정에는 이 절차에 필요한 코드 구성 및 특정 네임스페이스 참조가 포함되어 있으므로 해당 구성이 없으면 절차를 완료할 수 없습니다. 따라서 이 절차를 시작하기 전에 먼저 "프로젝트 설정"의 단계를 수행해야 합니다.

  1. 다음과 같은 두 가지 샘플 보고서를 프로젝트에 추가합니다.

  2. 클래스 위쪽에 CrystalDecisions.CrystalReports.Engine 네임스페이스에 대한 "Imports" [Visual Basic] 또는 "using" [C#] 문을 추가합니다.

    Note참고

    ReportDocument 클래스를 네임스페이스 접두사 없이 사용하고 IntelliSense에서 해당 클래스에 액세스할 수 있도록 이 네임스페이스를 선언해야 합니다.

    Imports CrystalDecisions.CrystalReports.Engine
    
    using CrystalDecisions.CrystalReports.Engine;
    
  3. 아래와 같이 보고서를 선택할 수 있는 private 도우미 메서드를 만듭니다.

    이 메서드는 정수 매개 변수 값을 받아서 "Select Case" [Visual Basic] 또는 "switch" [C#] 문을 실행하여 보고서를 선택합니다. 각각의 경우에서 이 메서드는 기본 클래스인 ReportDocument로 업캐스팅된 특정 보고서를 인스턴스화하여 반환합니다.

    Private Function ChooseReport(ByVal i As Integer) As ReportDocument
    Select Case i
    Case 1
    Dim chartReport As Chart = New Chart()
    Return CType(chartReport, ReportDocument)
    Case 2
    Dim hierarchicalGroupingReport As Hierarchical_Grouping
    = New Hierarchical_Grouping()
    Return CType(hierarchicalGroupingReport,
    ReportDocument)
    Case Else
    Dim worldSalesReport As World_Sales_Report = New
    World_Sales_Report()
    Return CType(worldSalesReport, ReportDocument)
    End Select
    End Function
    
    private ReportDocument ChooseReport(int i)
    {
    switch(i)
    {
    case 1:
    Chart chartReport = new Chart();
    return (ReportDocument)chartReport;
    case 2:
    Hierarchical_Grouping hierarchicalGroupingReport = new
    Hierarchical_Grouping();
    return (ReportDocument)hierarchicalGroupingReport;
    default:
    World_Sales_Report worldSalesReport = new
    World_Sales_Report ();
    return (ReportDocument)worldSalesReport;
    
    };
    }
    
  4. "프로젝트 설정"에서 만든 ConfigureCrystalReports() 메서드 내에서 기존의 코드를 삭제하고 다음과 같은 코드 줄을 새로 입력합니다.

  5. ReportDocument의 인스턴스를 선언한 다음, 첫 번째 보고서인 Chart.rpt를 선택하기 위해 정수 1을 전달하여 ChooseReport() 메서드를 호출함으로써 인스턴스에 값을 채웁니다.

    Dim myReportDocument As ReportDocument = ChooseReport(1)
    
    ReportDocument reportDocument = ChooseReport(1);
    
  6. ReportDocument 인스턴스에 대한 코드를 작성할 자리 표시자를 만들 수 있습니다.

    이 예제에서는 RecordSelectionFormula 속성을 사용하여 보고서 데이터를 필터링할 수 있습니다. ReportDocument는 사용 가능한 여러 가지 보고서를 나타내므로 이 필터는 여기에 전달되는 모든 보고서에 적용됩니다. 여기에서는 빈 문자열을 전달합니다.

    Note참고

    이 코드 행에서는 여러 보고서에 대한 공통 코드를 작성할 수 있도록 공통 기본 클래스인 ReportDocument로 업캐스팅하는 방법을 보여 줍니다.

    myReportDocument.RecordSelectionFormula = ""
    
    reportDocument.RecordSelectionFormula = "";
    
  7. ReportDocument 인스턴스를 CrystalReportViewer 컨트롤의 ReportSource 속성에 할당합니다.

    myCrystalReportViewer.ReportSource = myReportDocument
    
    crystalReportViewer.ReportSource = reportDocument;
    
  8. 프로젝트를 빌드하고 실행하여 보고서를 확인합니다.

참고 항목