ViewState 및 CrystalReportViewer 개체 모델의 상태 유지
ViewState의 정의
ViewState는 ASP.NET에서 뷰, 즉 Web Form의 상태를 유지하기 위한 브라우저 기반의 접근 방식입니다. 이 방식의 주요 기능은 웹 컨트롤의 상태를 유지하는 것입니다.
웹 서버 컨트롤이라고도 하는 웹 컨트롤은 Visual Basic에 도입된 Windows 컨트롤을 기반으로 모델링됩니다. Windows 컨트롤은 폼에서 텍스트 필드, 단추 또는 데이터 테이블과 같은 표시 기능의 일부를 캡슐화하는 개체입니다.
웹 컨트롤은 Windows 컨트롤과 유사합니다. Windows 컨트롤과 마찬가지로 웹 컨트롤은 웹 페이지 및 웹 페이지를 지원하는 코드 숨김 클래스라는 두 가지 수준에서 작동합니다. Windows Forms의 일반적인 컨트롤과 마찬가지로 웹 컨트롤은 표시 기능의 개별 부분을 Button, TextField, DropDownList, DataGrid 등의 GUI 개체로 캡슐화합니다. 코드 숨김 클래스에서 이러한 동일한 컨트롤은 속성 및 메서드를 제공하는 클래스로 구현됩니다.
그러나 웹 페이지는 상태가 저장되지 않는 환경이라는 점에서 Windows Form과 다릅니다. 따라서 페이지를 다시 로드할 때마다 웹 페이지의 상태를 유지하기 위해서는 특정 유형의 상태 유지 메커니즘이 필요합니다.
서버에서 인스턴스화된 개체의 상태는 Session을 통해 유지되는 것과 마찬가지로 웹 페이지에서 컨트롤의 상태는 ViewState를 통해 유지됩니다.
![]() |
---|
ViewState는 모든 웹 컨트롤의 상태를 자동으로 유지합니다. 이를 위해 ViewState에서는 컨트롤의 EnableViewState 속성을 기반으로 각 컨트롤을 저장합니다. 이 속성은 기본적으로 True로 설정되어 있습니다. |
ViewState는 페이지에서 웹 컨트롤의 데이터 상태를 저장하므로 브라우저와 웹 서버 사이에 페이지를 주고 받을 때 전체 ViewState 개체가 페이지에 포함되어 있어야 합니다. 이를 위해서는 전체 ViewState 개체를 문자열로 암호화한 다음, 페이지에서 숨겨진 폼 태그의 값 내에 이 문자열을 배치합니다. 예를 들어, Button 컨트롤 하나만 포함된 ASP.NET 웹 페이지의 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 개체 모델
그러나 더 광범위한 ReportDocument 개체 모델을 사용할 수 있으므로 CrystalReportViewer 개체 모델은 일반적으로 사용하지 않는 것이 좋습니다. 대체 가능한 이 개체 모델은 컨트롤 내에 포함되어 있지 않고 SDK에서 클래스 라이브러리의 일부로 제공됩니다.
![]() |
---|
자세한 내용은 "프로젝트에 적합한 개체 모델 선택"을 참조하십시오. |
상태 유지 메커니즘 공유
CrystalReportViewer 컨트롤을 사용하여 보고서 표시 및 개체 모델이라는 두 가지 역할을 모두 수행하려는 경우, ViewState에서는 이들 모두에 대한 상태를 유지하므로 별도의 상태 유지 메커니즘이 필요하지 않습니다.
![]() |
---|
CrystalReportViewer 컨트롤을 파일 디렉터리 경로에 바인딩하는 경우를 예로 들 수 있습니다. "코드에서 파일 디렉터리 경로에 바인딩"을 참조하십시오. |
그러나 보고서를 표시하는 데만 CrystalReportViewer 컨트롤을 사용한 다음, 이 컨트롤을 ReportDocument와 같은 외부 개체 모델에 바인딩하려는 경우에는 해당 외부 개체 모델을 유지하기 위한 별도의 상태 유지 메커니즘이 필요합니다. 일반적으로 이러한 두 번째 상태 유지 메커니즘은 Session(경우에 따라서는 Cache)을 통해 수행됩니다.
참고 항목
-
이 부분에서는 Crystal Reports SDK의 기본 사항에 대해 설명합니다. 이러한 기본 사항을 잘 알고 있으면 프로젝트의 구조를 계획하는 데 도움이 됩니다.