다음 내용은 프로그램 코드입니다.
VS.Net에서 Crystal Reports를 연구하기 전에 친구와 저는 웹 애플리케이션에 이 복잡한 내용을 추가하는 방법에 대해 매우 궁금했습니다. 일주일 후, 많은 "HOWTO" 문서를 읽은 후 Asp.net 프로그램에 몇 가지 간단한 보고서를 성공적으로 추가하고 몇 가지 팁을 얻었습니다.
이 기사에서는 .Net 웹 응용 프로그램에서 Crystal Reports를 사용하는 방법을 설명하고 학습 과정에서 우회를 피하는 데도 도움이 될 수 있습니다. 최상의 결과를 얻으려면 독자는 Asp.Net 데이터베이스 액세스에 대한 기본 지식과 VS.Net을 사용한 개발 경험이 있어야 합니다.
소개
Crystal Reports는 여러 가지 방법으로 얻을 수 있으며 그 중 하나는 VS.Net을 사용하여 생성하는 것입니다. 이는 런타임에 속성과 메서드를 작동할 수 있는 매우 풍부한 모델을 제공합니다. VS.Net을 사용하여 .Net 프로그램을 개발하는 경우 VS.Net에 이미 내장되어 있으므로 다른 소프트웨어를 설치할 필요가 없습니다.
이점:
VS.Net Crystal Reports에는 다음과 같은 주요 장점이 있습니다.
신속한 보고서 개발
복잡한 대화형 차트로 내보내는 기능
다른 컨트롤과 함께 WebForm에서 사용할 수 있습니다.
보고서를 .pdf, .doc, xls, html, rtf 및 기타 형식으로 동적으로 내보낼 수 있습니다.
구조:
일부 구성 요소는 Crystal Reports의 2계층 구조를 구성합니다. 필수 웹 응용 프로그램은 다음과 같습니다.
고객:
클라이언트에는 aspx 페이지에 포함된 보고서에 액세스할 수 있는 브라우저만 필요합니다.
섬기는 사람:
- 크리스탈 보고서 엔진(CREngine.dll)
보고서 파일의 데이터 병합, 보고서를 다른 형식으로 변환 등과 같은 일부 작업을 완료할 수 있습니다. Asp.Net의 Crystal Reports를 일반 HTML 형식으로 변환할 수 있는 것은 바로 보고 엔진 때문입니다.
- 크리스탈 보고서 디자이너(CRDesigner.dll)
Crystal Reports는 제목을 디자인하고 데이터, 수식, 차트, 하위 보고서 등을 삽입할 수 있는 디자이너에서 생성됩니다.
- .rpt 보고서 파일
보고서 실행의 첫 번째 단계는 Crystal Report Designer 인터페이스에서 이 보고서를 만드는 것입니다. Microsoft는 기본 설치에서 미리 만들어진 .rpt 예제를 제공합니다.
- 데이터 소스
.rpt 파일에서 데이터베이스를 가져오는 방법은 선택한 방법에 따라 달라집니다. Crystal Reports에서 코드를 사용하지 않고 데이터 자체를 선택하도록 선택하거나 DataSet을 수동으로 조합한 다음 이를 보고서 파일로 전송하도록 선택할 수 있습니다. .
- Crystal Report Viewer 웹 양식 제어(CRWebFormViewer.dll)
Crystal Report 뷰 컨트롤은 .aspx 페이지에 보고서를 저장하는 컨테이너로 간주할 수 있는 WebForm 컨트롤입니다. 참고: 일부 복잡한 작업에서는 보고서 서버와 웹 서버가 동일한 물리적 호스트에 있지 않을 수 있으며 웹 서버는 HTTP 요청을 보고서 서버로 전송합니다. Crystal Reports는 WebService로 실행될 수도 있습니다.
실행 모드에서 Crystal Reports에서 데이터를 가져오는 방법은 다음과 같습니다.
- 풀 모드:
요청 시 Crystal Reports는 지정된 드라이버를 기반으로 데이터베이스에 직접 연결하고 데이터를 수집합니다.
- 푸시 모드:
이때 개발 테이블은 데이터를 연결하고 DataSet을 조립하는 동시에 보고서로 전송하기 위해 자체 코드를 작성해야 합니다. 이러한 경우 연결 공유를 사용하고 레코드 수집 크기를 제한하여 보고서 성능을 최대화할 수 있습니다.
보고서 유형:
Crystal Report Designer는 보고서를 프로젝트에 직접 포함하거나 독립적인 보고서 개체를 사용할 수 있습니다.
- 강력한 형식의 보고서:
보고서 파일을 프로젝트에 추가하면 "강력한 형식의" 보고서가 됩니다. 이러한 경우 보고서 개체를 직접 만들 수 있으므로 일부 코드가 줄어들고 일부 성능이 제공될 수 있습니다.
- 유형이 지정되지 않은 보고서:
여기에 있는 보고서는 프로젝트에 직접 포함되지 않으므로 '유형이 지정되지 않은' 보고서라고 합니다. 이 경우 Crystal Reports의 "ReportDocuemt" 개체를 사용하여 인스턴스를 만들고 보고서를 "수동으로" 사용해야 합니다.
기타 주의사항
- Crystal Report Viewer에는 확대/축소, 페이지 탐색 등과 같은 몇 가지 멋진 기능이 있지만 단, 인쇄 기능을 제공하지 않으므로 브라우저의 인쇄 기능을 호출해야 합니다.
- VS.Net에 Crystal Report가 등록되어 있지 않으면 30회만 사용할 수 있습니다. 30회 이후에는 "저장" 기능을 더 이상 사용할 수 없습니다. 이를 방지하려면 여기 http://www.crystaldecisions.com/ 에서 이 제품을 등록하지 마십시오. (그렇지 않은 것 같습니다. 등록하지 않아도 장기간 사용이 가능한 것 같으나 지원이 되지 않습니다.)
- Crystal Reports의 기본 설치는 5명의 사용자만 지원할 수 있습니다. 더 많은 사용자를 지원하려면 http://www.crystaldecisions.com/ 에서 라이센스를 구입해야 합니다.
느껴봅시다 - Asp.net에서 미리 만들어진 Crystal Report 파일 사용 1) WebForm 도구 모음에서 Crystal Report Viewer 컨트롤(Crystal Report Viewer)을 .aspx 페이지로 드래그합니다.
2) Crystal Report Viewer 컨트롤의 속성 창을 불러옵니다.
3) [...] 버튼을 클릭하면 "Data Binding" 속성을 볼 수 있으며, DataBinding 창이 팝업됩니다.
4) 왼쪽의 "바인딩 가능한 속성" 영역에서 "보고서 소스"를 선택합니다.
5) "사용자 정의 바인딩 표현식" 라디오 버튼을 선택하고 오른쪽 하단 창에서 .rpt 파일의 파일 이름과 경로를 지정합니다. 예: "C:\Program Files\Microsoft Visual Studio.NET\ Crystal Reports\Samples\Reports\General Business\World Sales Report.rpt" 및 "확인"
참고: "World Sales Report.rpt" 파일은 VS.Net 설치 중에 생성됩니다. 설치 과정에서 다른 디렉터리를 지정한 경우 지금 경로가 올바른지 확인하는 것이 좋습니다.
위 단계에서는 실제로 Asp.Net 파일에 다음 코드를 삽입합니다.
게다가:
id="CrystalReportViewer1"
runat="서버" 너비="350px" 높이="50px"
보고서 소스=''>
참고: 내 VS.Net 공식 버전에서 자동으로 생성된 코드에서 ReportSource가 생성한 스타일은 다음과 같습니다.
보고서 소스=""
이는 잘못된 것이며 오류 메시지가 나타납니다. 두 가지 오류가 있습니다.
본 글에서 소개한 포맷에 따라 수동으로 수정해야 하는데 이는 VS.Net의 버그로 볼 수 있습니다.
6) Page_Load 메서드에서 DataBind 메서드를 호출합니다. (코드는 VB.Net입니다)
개인 하위 페이지_로드(ByVal 발신자 As System.Object, ByVal e As System.EventArgs)
데이터바인드()
서브 끝
7) 페이지를 저장하고 컴파일합니다. 이제 Crystal Reports가 포함된 WebForm 페이지가 생겼습니다.
참고: 실제 개발에서는 처음에 inetsrv 디렉터리에 접근할 수 없다는 오류가 발생합니다. 해결 방법은 User 사용자가 쓰기 가능한 권한을 갖도록 디렉터리의 보안 속성을 변경하는 것입니다. Flying Knife .Net 시스템에서 제공하는 솔루션이 쓸모가 없다는 것을 알았는데, Windows.Net 운영 체제를 사용하고 있기 때문일 수도 있습니다.
Asp.Net에서 Crystal Report 사용(2부)
www.dotnet8.com 2002-9-6 DotNet Bar
다음 내용은 프로그램 코드입니다.
풀 모드 사용 풀 모드를 통해 Crystal Reports를 실행하려면 다음 단계를 사용합니다.
1. 먼저 rpt 파일을 생성하고 Crystal Report 디자인 인터페이스를 사용하여 몇 가지 필요한 데이터 연결을 설정합니다.
2. CrystalReportViewer 컨트롤을 aspx 페이지로 끌어서 놓고 해당 속성을 설정하여 이전 단계에서 만든 .rpt 파일을 지정합니다.
3. 코드에서 DataBind 메서드를 호출합니다.
.rpt 파일 만들기:
1) "솔루션 브라우저"를 마우스 오른쪽 버튼으로 클릭하고 팝업 메뉴에서 "추가"--"새 항목 추가"->"Crystal Report"를 선택합니다.
2) "Crystal Report Library"에서 "As Blank Report" 라디오 버튼을 선택하고 마지막으로 "OK"를 클릭합니다.
3) 여기에 Crystal Report Designer가 나타납니다.
4) 보고서에서 "세부 정보 영역"을 마우스 오른쪽 버튼으로 클릭하고 "데이터베이스" -> "데이터베이스 추가/삭제..."를 선택합니다.
5) "데이터베이스 전문가" 팝업에서 "OLE DB(ADO)" 옵션을 확장하면 또 다른 "OLE DB(ADO)" 창이 나타납니다.
6) "OLE DB (ADO)" 팝업창에서 "Microsoft OLE DB Provider for SQL Server"를 선택한 후 "다음"을 선택하세요.
7) 연결할 정보 서버를 지정하십시오: ASPCN (머신의 이름은 무엇이든 쓰십시오)
사용자 ID: sa
비밀번호:
데이터베이스: 술집
8) "다음"을 클릭하고 마지막으로 "마침" 버튼을 클릭합니다.
9) 이때 "데이터베이스 전문가" 창에서 선택한 데이터베이스를 볼 수 있습니다.
10) "Pubs" 데이터베이스를 확장하고 "테이블"을 확장한 다음 "Stores" 테이블을 선택하고 이를 "선택한 테이블" 영역에 추가하고 "확인" 버튼을 클릭합니다.
11) 이제 "필드 리소스 브라우저"에서 선택한 테이블과 테이블의 필드가 왼쪽의 "데이터베이스 필드" 영역에 표시됩니다.
12) 필요한 필드를 보고서의 '세부정보' 영역으로 끌어다 놓습니다. 필드 이름은 "머리글" 영역에 자동으로 나타납니다. 헤더 텍스트를 수정하려면 "헤더" 영역의 텍스트를 마우스 오른쪽 버튼으로 클릭하고 "텍스트 개체 편집" 옵션을 선택한 후 편집하세요.
13) 저장하여 Crystal Report 파일을 만듭니다.
CrystalReportViewer 컨트롤 만들기
14) 이전 WebForm으로 돌아가서 Crystal Report Viewer 컨트롤을 페이지로 끌어다 놓습니다.
15) Crystal Report Viewer 컨트롤의 속성 창을 불러와 "DataBindings" 영역을 선택하고 [...]를 클릭합니다.
16) "Crystal Report Viewer 데이터 바인딩 창"의 오른쪽 "바인딩 가능 속성"에서 "ReportSource"를 선택하고 오른쪽 하단의 "Custom Binding Expression"을 선택하여 .rpt 파일 경로를 지정합니다.
17) 이 시점에서 Crystal Report Viewer 컨트롤의 일부 가상 데이터로 구성된 보고서 파일의 미리 보기를 볼 수 있습니다.
참고: 위의 예에서 CrystalReportViewer는 디자인 타임에 실제 데이터가 저장되어 있기 때문에 디자인 타임에 직접 데이터를 호출할 수 있습니다. 이 경우 디자인 타임에 데이터를 저장하지 않으면 데이터를 표시할 수 없습니다. 대신 일부 더미 데이터가 표시되고 실제 데이터는 실행 시에만 선택됩니다.
프로그래밍 뒤에 코드
18) Page_Load 메서드에서 DataBind 메서드를 호출합니다.
프로그램을 실행하세요
19) 프로그램을 만들고 실행해보세요!
이제 페이지 탐색, 확대/축소 등 Crystal Reports의 일부 기본 제공 기능을 웹 페이지에서 직접 사용할 수 있습니다.
Asp.Net에서 Crystal Report 사용(2부)
www.dotnet8.com 2002-9-6 DotNet
[HTML] 푸시 모드를 사용하여 Crystal Reports를 실행하려면 다음 단계를 사용합니다.
1. 데이터 세트 디자인
2. .rpt 파일을 생성하고 이를 이전 단계에서 생성한 DataSet에 할당합니다.
3. aspx 페이지에 CrystalReportViewer 컨트롤을 끌어다 놓고 이전 rpt 파일과 연결합니다.
4. 코드로 데이터베이스에 액세스하고 DataSet에 데이터를 저장합니다.
5. DataBind 메서드를 호출합니다.
데이터세트 디자인
1) "솔루션 브라우저"를 마우스 오른쪽 버튼으로 클릭하고 "추가" -- "새 항목 추가" --> "데이터 세트"를 선택합니다.
2) "서버 탐색기"의 "SQL Server"에서 "Stores" 테이블(PUBS 데이터베이스에 있음)을 끌어서 놓습니다.
3) 이때 데이터 세트에는 Stores 테이블의 구조 다이어그램이 있습니다.
- .xsd 파일에는 구조 다이어그램만 포함되며 데이터는 포함되지 않습니다.
.rpt 파일 만들기:
4) 위에서 소개한 방법을 사용하여 이 파일을 생성합니다. 유일한 차이점은 이전 직접 연결 데이터 대신 데이터 세트를 사용한다는 것입니다.
5) .rpt 파일을 생성한 후 마우스 오른쪽 버튼으로 "세부 정보" --> "데이터베이스 추가/삭제"를 클릭합니다.
6) "Database Expert" 창에서 "Project Data"(이전 OleDb 대체)를 확장하고 "ADO.Net Data Set" -- "DataSet1"을 확장한 다음 "Stores" 테이블을 선택합니다.
7) "Selected Tables"에 "Stores" 테이블을 추가하고 "OK"를 클릭합니다.
8) PULL 모드의 메소드를 사용하여 WebForm을 생성합니다.
Crystal Report Viewer 컨트롤 만들기
9) Crystal Report Viewer 컨트롤을 만들고 해당 속성을 설정합니다. 이는 PULL 모드와 일치합니다.
코드 숨김 코드:
10) Page_Load 메서드에서 다음 하위 함수를 사용합니다.
VB.Net 코드:
하위바인드보고서()
myConnection을 새 SqlClient.SqlConnection()으로 흐리게 설정
myConnection.ConnectionString= "서버= (로컬)NetSDK;데이터베이스=pubs;Trusted_Connection=yes"
Dim MyCommand를 새 SqlClient.SqlCommand()로 사용
MyCommand.Connection = myConnection
MyCommand.CommandText = "상점에서 * 선택"
MyCommand.CommandType = CommandType.Text
MyDA를 새 SqlClient.SqlDataAdapter()로 희미하게 표시
MyDA.SelectCommand = MyCommand
myDS를 새 데이터세트로 흐리게 표시1()
'이것은 디자인 모드에서 사용하는 DataSet입니다.
MyDA.Fill(myDS, "스토어")
'이전 DataSet과 동일한 이름을 사용해야 합니다.
새 CrystalReport1()로 Dim orRpt
'크리스탈 보고서 바인딩
oRpt.SetDataSource(myDS)
'Crystal Report의 ReportSource 설정
CrystalReportViewer1.ReportSource = oRpt
서브 끝
C# 코드:
개인 무효 BindReport()
{
string strProvider = "서버=(로컬);DataBase=pubs;UID=sa;PWD=";
CrystalReport1 oCR = new CrystalReport1();
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "상점에서 * 선택";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"저장소");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
참고: 위 코드에서 oRpt는 "강력한 형식의" 보고서 파일이라는 점에 유의해야 합니다. "UnTyped" 보고서를 사용해야 하는 경우 ReportDocument 개체를 사용한 다음 보고서 파일을 호출해야 합니다.
프로그램을 실행하세요.
11) 프로그램 실행
보고서 파일을 다른 형식으로 내보내기
보고서 파일을 다음 형식으로 내보낼 수 있습니다.
1. PDF(휴대용 문서 형식)
1. 2. DOC(MS 워드 문서)
2. 3. XLS(MS 엑셀 스프레드시트)
3. 4. HTML(하이퍼 텍스트 마크업 언어 – 3.2 또는 4.0 호환)
4. 5. RTF(서식 있는 텍스트 형식)는
가져오기 모드를 사용하여 보고서를 내보냅니다. 가져오기 모드를 사용하여 만든 파일을 내보낼 때 Crystal Reports는 필요한 데이터를 정확하게 엽니다. 내보내기 기능을 수행하는 코드는 다음과 같습니다.
C# 코드:
VB.Net 코드:
Private Sub Button1_Click(ByVal 송신자는 System.Object로, ByVal e는 System.EventArgs로) Button1.Click을 처리합니다.
Dim myReport As CrystalReport1 = 새 CrystalReport1()
'참고: 여기서는 강력한 형식의 Crystal Report 인스턴스를 만듭니다.
Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = 새 CrystalDecisions.Shared.DiskFileDestinationOptions()
myReport.ExportOptions.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
' 이 옵션은 다른 파일로 내보낼 때도 필요합니다.
'예: Microsoft Exchange, MAPI 등
myReport.ExportOptions.ExportFormatType = CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat
'여기에서는 .pdf 형식 파일로 내보냅니다. 위에서 다른 유형의 파일을 선택할 수도 있습니다.
DiskOpts.DiskFileName = "c:Output.pdf"
'정확한 디렉터리를 지정하지 않으면 파일은 [Windows]System32 디렉터리에 저장됩니다.
myReport.ExportOptions.DestinationOptions = DiskOpts
'Crysstal Report 파일에는 직접적인 FileName 속성이 포함되어 있지 않으므로 저장된 파일 이름을 직접 지정할 수 없습니다.
'따라서 DiskFileDestinationOptions 개체를 사용하고 해당 DiskFileName 속성을 설정해야 합니다.
'원하는 경로에 대해 마지막으로 Crystal Reports의 DestinationsOptions 속성을 위의 DiskFileDestinationOption으로 지정합니다.
myReport.Export()
'위의 코드는 내보내기 작업을 수행합니다.
서브 끝
PUSH 모드를 사용하여 Crystal 보고서 내보내기 내보낸 보고서가 PUSH 모드로 생성되면 첫 번째 단계는 연결을 설정하고 프로그래밍을 통해 DataSet을 조합한 다음 보고서의 SetDataSource 속성을 설정하는 것입니다. 다음 단계는 Pull 모드와 동일합니다.
[/HTML]
.NET 환경에서의 Crystal Reports 사용 요약
Crystal Reports는 제가 일반 관리 시스템을 개발할 때 모든 보고서에 Crystal Reports를 사용했습니다. 이제 노트를 사용하여 모든 사람에게 Crystal Report를 제공하겠습니다.
1. 내장된 Crystal Report를 사용할 경우 등록을 해주시기 바랍니다. 그렇지 않으면
Crystal Report 등록번호: 6707437608를 30회만 사용할 수 있습니다.
비밀번호:AAP5GKS0000GDE100DS
2. 미리보기에 CrystalReportViewer를 사용합니다.
CrystalReportViewer 컨트롤을 사용하면 응용 프로그램에서 Crystal Report를 볼 수 있습니다. ReportSource 속성은 보려는 보고서를 설정합니다. 이 속성이 설정되면 보고서가 뷰어에 표시됩니다. 보고서 소스는 ReportDocument, 보고서 파일 경로 또는 강력한 형식의 보고서일 수 있습니다.
1. "도구 상자"를 열고 CrystalReportViewer를 rptVew라는 양식으로 끌어 놓습니다.
2. 끌어서 놓기를 사용하여 Windows Forms Viewer의 크기를 원하는 크기로 조정하고 원하는 위치로 이동합니다.
3. 애플리케이션을 실행하면 뷰어에 보고서가 표시됩니다.
3. 새 보고서 만들기
1. "추가"를 가리킨 다음 "새 항목 추가"를 클릭합니다.
2. 새 항목 추가 대화 상자의 템플릿 영역에서 Crystal Report를 선택하고 보고서 이름을 rptClient로 지정한 다음 "열기"를 클릭합니다.
3. Crystal Report 갤러리에서 다음 옵션 중 하나를 선택합니다.
· 보고서 전문가 사용 - 보고서 생성 프로세스를 안내하고 선택 항목을 Crystal Report Designer에 추가합니다.
· 빈 보고서로 - Crystal Report Designer를 엽니다.
· 기존 보고서에서 - 지정한 다른 보고서와 동일한 디자인으로 새 보고서를 만듭니다.
참고 Crystal Report 라이브러리에는 여러 특정 유형의 보고서 작성 과정을 안내할 수 있는 전문가가 포함되어 있습니다. 귀하의 필요에 맞는 보고서 작성 방법을 결정하기 위해 전문가의 도움을 받아 초기 보고서를 작성할 수도 있습니다.
4. 확인 버튼을 클릭하세요.
보고서 전문가를 사용하도록 선택한 경우 데이터 탐색기와 함께 보고서 전문가 대화 상자가 나타납니다. 각 폴더에 필요한 데이터를 선택하고 보고서 전문가 탭 인터페이스에서 작업을 완료한 다음 마침을 클릭하여 Crystal Report Designer 및 보고서에 액세스합니다
. 4. 데이터 소스를 동적으로 설정해야 합니까?
Crystal Reports는 데이터베이스 드라이버를 통해 데이터베이스에 연결됩니다. 각 드라이버는 특정 데이터베이스 유형 또는 데이터베이스 액세스 기술을 처리하도록 작성되었습니다.
풀 및 푸시 모델 개발자에게 가장 유연한 데이터 액세스 방법을 제공하기 위해 Crystal Reports 데이터베이스 드라이버는 데이터 액세스의 풀 및 푸시 모델을 모두 제공하도록 설계되었습니다.
풀 모델
끌어오기 모델에서는 드라이버가 데이터베이스에 연결하고 필요에 따라 데이터를 "가져옵니다". 이 모델을 사용하면 개발자가 코드를 작성할 필요 없이 데이터베이스에 대한 연결과 데이터를 얻기 위해 실행되는 SQL 명령이 모두 Crystal Reports 자체에서 처리됩니다. 런타임에 특별한 코드를 작성할 필요가 없다면 풀 모델을 사용하세요.
푸시 모델
반면 푸시 모델에서는 개발자가 데이터베이스에 연결하기 위한 코드를 작성하고, SQL 명령을 실행하여 보고서의 필드와 일치하는 레코드 세트 또는 데이터 세트를 만들고, 개체를 보고서에 전달해야 합니다. 이 방법을 사용하면 응용 프로그램에 연결 공유를 추가하고 Crystal Reports가 데이터를 받기 전에 데이터를 필터링할 수 있습니다.
4. ADO.NET 데이터 세트에서 보고서를 작성하고
데이터베이스에서 데이터 세트 개체를 생성합니다
. 1. 프로젝트에 새 스키마 파일을 생성합니다.
a. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 "추가"를 가리킨 다음 그런 다음 "새 항목 추가"를 클릭하십시오.
b.새 항목 추가 대화 상자의 범주 영역에서 폴더를 확장한 다음 데이터를 선택합니다.
c. 템플릿 영역에서 데이터세트를 선택합니다.
d. 기본 이름 Dataset1.xsd를 수락합니다.
그러면 나중에 강력한 형식의 데이터 세트를 생성하는 데 사용될 새 스키마 파일(Dataset1.xsd)이 생성됩니다. 스키마 파일은 ADO.NET 데이터 세트 디자이너에 나타납니다.
2. 데이터베이스 위치를 지정합니다.
a. 서버 탐색기에서 데이터 연결을 마우스 오른쪽 버튼으로 클릭하고 연결 추가를 선택합니다.
b. 데이터 연결 속성 대화 상자에서 공급자 탭을 클릭한 다음 공급자(예: SQL Server용 Microsoft OLE DB 공급자)를 선택합니다.
c. 연결 탭을 클릭하고 데이터베이스 위치를 지정합니다. 필요한 경우 서버와 로그인 정보를 입력하세요.
d.확인 버튼을 클릭합니다.
이제 데이터베이스와 해당 테이블 및 필드가 서버 탐색기의 데이터 연결 노드 아래에 나타납니다.
3. 솔루션 탐색기에서 Dataset1.xsd를 두 번 클릭합니다(아직 활성 보기가 아닌 경우).
이제 Dataset1.xsd가 데이터 세트 탭에 나타납니다.
4. 데이터 세트의 스키마를 지정하려면 서버 탐색기에서 Dataset1.xsd의 데이터 세트 탭으로 필요한 테이블을 끌어 놓습니다.
5. Dataset1.xsd 저장을 클릭하여 Dataset1.xsd 파일을 저장합니다.
6. 생성 메뉴에서 생성을 클릭하여 프로젝트에 대한 데이터 세트 개체를 생성합니다.
ADO.NET DataSet 개체는 Crystal 보고서에 테이블을 추가할 수 있는 데이터에 대한 설명을 제공합니다. Crystal Report Designer의 데이터베이스 전문가를 사용하여 ADO.NET 데이터 세트 개체의 테이블을 추가합니다.
보고서 전문가를 사용하여 새 보고서를 생성할 때 데이터베이스 전문가에게 문의하세요. 또는 ADO.NET을 사용하여 생성된 보고서에서 데이터베이스 전문가에 액세스하려면 보고서 디자이너에서 마우스 오른쪽 단추를 클릭하고 데이터베이스를 가리킨 다음 데이터베이스 추가/제거를 클릭합니다.
ADO.NET 데이터 세트 개체에 보고서 연결
1. 데이터베이스 전문가에서 프로젝트 데이터 폴더를 확장합니다.
2. "ADO.NET 데이터 세트" 폴더를 확장합니다.
3. 필요한 데이터세트 개체를 선택합니다.
예를 들어 "WindowsApplication1" 프로젝트의 스키마 파일 "Dataset1.xsd"에서 생성된 데이터 세트 개체를 사용하는 경우 "WindowsApplication1.Dataset1"을 선택해야 합니다.
4. 다른 데이터 소스와 마찬가지로 보고서에 추가할 테이블을 선택합니다.
5. 동적으로 변경되는 데이터 소스를 위한 코드
Dim dsdataSet As New DataSet()
Dim oRpt As New rptClient() '설정된 보고서 rptClient에서는
독자가 스스로 데이터 세트 dsdataSet를 채워야 합니다
.'"보고서 엔진" 개체 모델을 사용하여 채워진 데이터 세트를 보고서
oRpt에 전달합니다. SetDataSource(dsdataSet.Tables(0))
'데이터가 포함된 보고서 개체를 Windows Forms 뷰어에 바인딩합니다. rptVew(CrystalReportViewer 컨트롤)
rptVew.ReportSource = oRpt
FillDataSet 메서드는 지정된 데이터베이스에 연결하고 데이터를 추출한 다음 데이터베이스 연결을 끊습니다. 데이터베이스의 여러 테이블을 보고서에 추가하려면 SQL JOIN 문을 사용하여 이러한 테이블을 함께 조인한 다음 FillDataSet 메서드에서 결과 테이블을 지정합니다.
6. 마스터-세부 사항 보고서 만들기
보고서에는 많은 보고서가 있습니다. 주문 및 주문 제품 세부 정보와 같은 마스터-세부 테이블 구조는 한 테이블의 레코드이고 항목은 다른 테이블의 여러 레코드입니다. 이러한 종류의 보고서는 그룹화 기능 구현을 사용할 수 있습니다. :
1. 새 프로젝트 생성
2. FORM1에 CrystalReportViewer 컨트롤 추가
3. 서비스 리소스 관리자에서 SQL SERVER 2000의 Northwind 데이터베이스에 연결
4. 데이터 세트 Dataset1을 추가하고 Orders 및 Order Details가 데이터에 추가됩니다. 세트.
5. Crystal Report를 추가하고 Report Expert를 사용하여 프로젝트 데이터에서 "ADO.NET Data Set"을 선택하고 Orders 및 Order Details 테이블을 삽입합니다. "Link"는 관련 필드에 대한 링크이고 표시할 필드를 선택합니다. "필드" 기본 테이블 및 세부 테이블의 필드에 대해 그룹 내 그룹 선택 기준은 주문 테이블 OrdersID 필드, 합계, 차트, 선택(필터링 가능), 스타일(보고서 제목 설정 가능), 스스로 설정하십시오. 설정 후 마침을 클릭합니다.
6. 보고서 디자이너에 표시할 필드의 위치, 너비 등을 조정합니다.
7. 창에 코드를 추가합니다.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)는 MyBase.Load
Dim oRpt를 새 CrystalReport1()
Dim dsdataSet As New Dataset1()
로 처리합니다.
Dim CN As New Data.SqlClient.SqlConnection("데이터 소스=PMSERVER;초기 카탈로그=Northwind;사용자 ID=sa;password=sa")
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from 주문", CN)
daOrders.Fill(dsdataSet, "주문")
Dim daDetails를 새 Data.SqlClient.SqlDataAdapter("select * from [Order Details]", CN)
daDetails.Fill(dsdataSet, "Order Details")
'"보고서 엔진" 개체 모델을 사용하여 채워진 데이터 세트를 보고서에 전달합니다.
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource = oRpt
End Sub
8. 프로그램을 실행합니다.
7. 프로그램을 사용하여 보고서의 텍스트를 변경합니다.
코드는 다음과 같습니다.
Dim GetTextObject As TextObject
' 이름으로 ReportObject를 가져와서 TextObject로 변환하고 이 개체를 반환합니다.
GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text = "XXXX 시스템"
요약: Crystal Reports에는 WORD, EXCEL, RTF 및 기타 파일을 내보낼 수도 있고 복잡하고 아름다운 차트를 생성할 수도 있는 매우 강력한 기능이 있습니다. WEB 및 WINDOWS 보고서 개발을 위한 강력한 도구입니다.
(이 기사의 정보 중 일부는 MSDN에서 가져온 것입니다.)
작성자: Li Honggen
전자 메일: [email protected]
나는 다음과 같은 아이디어를 가지고 있습니다:
1. 연결 쿼리를 통해 SQL 데이터베이스 관련 데이터를 얻습니다.
2. 이를 DataSet에 배치합니다.
3. Crystal Reports(선형 또는 열형 템플릿)를 호출하여 보고서를 생성합니다.
4. EXCEL 문서를 출력하고 생성합니다.
영웅 여러분, 위의 아이디어를 구현하는 방법을 알려주십시오. (예시가 있으면 더 좋을 것 같아요)
매우 감사합니다!
------------------------------------- -------------
1. 프로젝트에 새 프로젝트 DataSet을 추가하고, 데이터베이스에 연결하고, 필요한 데이터 테이블 또는 저장 프로시저를 추가합니다.
이 DataSet으로 드래그하고 DataSet을 컴파일합니다.
2. Vs.net과 함께 제공되는 Crystal Report를 사용하여 DataSet을 데이터 소스로 사용하여 보고서를 만듭니다.
3. 프로그램에서 이 보고서에 데이터를 푸시합니다.
4.Crystal Report에는 Excel로 출력할 수 있는 옵션이 있으며, 이는 프로그램을 통해서도 달성할 수 있습니다.
Dim conn As SqlConnection
Dim da As SqlDataAdapter
문자열로 strSQL을 희미하게
conn = 새 SqlConnection()
conn.ConnectionString = "사용자 ID=sa; PWD=1234;데이터 소스=xxxx; 초기 카탈로그 =xxxxx"
연결.열기()
strSQL = "TableName에서 * 선택"
da = 새 SqlDataAdapter(strSQL, conn)
Dim ds를 새 DataSet()으로 사용
da.Fill(ds, "테이블 이름")
새 ReportName()으로 RptDoc을 희미하게 만듭니다.
RptDoc.SetDataSource(ds)
'RptDoc에 대한 데이터를 지정합니다.
CrystalView1.ReportSource = RptDoc 'CrystalView에 대한 데이터 지정
CrystalView1.DataBind()
연결.닫기()
5. 여러 테이블과 연결된 필드를 표시해야 하는 경우 저장 프로시저를 사용하여 DataSet을 만드는 것이 가장 좋습니다.
------------------------------------- -------------
다음 코드를 참조하세요:
문자열 strconn=연결 문자열;
SqlConnection myconn=new SqlConnection(strconn);
string strcmd=@"select 문";
SqlCommand mycmd=new SqlCommand(strcmd,myconn);
SqlDataAdapter myda=new SqlDataAdapter(strcmd,myconn);
DataSet myds=new DataSet();
myconn.Open();
myda.Fill(myds,"보고서 이름");
보고서 이름 myrpt =새 보고서 이름();
myrpt.SetDataSource(myds);
this.CrystalReportViewer1.ReportSource=myrpt;
EXCEL로 내보내기:
myrpt.ExportOptions.ExportDestinationType=CrystalDecisions.Shared.ExportDestinationType.DiskFile;
myrpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.Excel;
CrystalDecisions.Shared.DiskFileDestinationOptions opt=new CrystalDecisions.Shared.DiskFileDestinationOptions();
opt.DiskFileName=@"파일 이름";
myrpt.ExportOptions.DestinationOptions =opt;
myrpt.Export();
Crystal Reports 9용 중국어 도움말 다운로드:
http://www.ourfly.com/download/download.aspx
http://www.enwell.net/soft/
http://www.fast8.com/news.asp
Visual Studio .NET
PictureObject 구성원용 Crystal Reports는 다음을 참조하세요.
PictureObject 클래스¦ CrystalDecisions.CrystalReports.Engine 네임스페이스 퍼블릭 인스턴스 속성
테두리(ReportObject에서 상속됨) 테두리입니다. 테두리 개체를 가져옵니다.
높이(ReportObject에서 상속됨) Int32. 트윕 단위로 개체의 높이를 가져오거나 설정합니다.
종류(ReportObject에서 상속됨) ReportObjectKind. 보고서 개체의 유형을 가져옵니다.
Left(ReportObject에서 상속됨) Int32. 트윕 단위로 개체의 왼쪽 위 모서리 위치를 가져오거나 설정합니다.
이름(ReportObject에서 상속됨) 문자열입니다. 개체 이름을 가져옵니다.
ObjectFormat(ReportObject에서 상속됨) ObjectFormat. ObjectFormat 개체를 가져옵니다.
Top(ReportObject에서 상속됨) Int32. 트윕 단위로 개체의 상단 위치를 가져오거나 설정합니다.
너비(ReportObject에서 상속됨) Int32. 트윕 단위로 개체의 너비를 가져오거나 설정합니다.
보다
PictureObject
클래스는 CrystalDecisions.CrystalReports.Engine
Dim picObject를 PictureObject로
가져옵니다.
picObject = oRpt.ReportDefinition.ReportObjects.Item("picture1")
출처: http://expert.csdn.net/Expert/topic/1896/1896874.xml?temp=.78677
웹폼 기반의 크리스탈 리포트를 사용할 때, 인터넷에서 단순히 "아다오(A Dao)" 방법을 따르면, 반드시 메시지가 표시됩니다. 로그인에 실패했습니다.
이 문제에 대해서는 Crystal Reports의 도움말 파일을 하루 종일 연구하여 마침내 해결책을 얻었습니다.
나는 보수적인 사람이 아니다. 나처럼 이 문제를 연구하는 데 에너지를 소비하는 네티즌이 많다고 생각한다. 모두가 나처럼 에너지를 낭비하는 것을 원하지 않는다.
이 솔루션을 구현하기 위해 수행한 몇 가지 단계는 다음과 같습니다. 걱정하지 마시고 천천히 읽어보시면 큰 도움이 될 것입니다.
1단계: 샘플 파일을 봅니다. Crystal Reports는 샘플 파일과 함께 제공되며 데이터베이스에 액세스할 수 있습니다(비밀번호 없이). 먼저 샘플 파일(webform 및 winform 기반)을 실행했고 그 결과 "날아다니는 칼" 예제와 마찬가지로 올바른 보고서가 표시되었습니다.
그래서 리포트 파일과 .aspx 파일을 직접 생성했는데 결과적으로 로그인 실패라고 나오네요! 그런데 보고서 파일을 샘플 보고서 파일로 변경했더니 더 이상 오류가 발생하지 않았습니다.
무엇이 문제인가요? 보고서 형식 파일에 로그인 권한 설정이 있는 것은 아닐까요? 추적과 디버깅을 통해 제가 만든 보고서 파일과 샘플 보고서 파일을 비교 분석한 결과 차이가 없었습니다. 리포트 파일에는 문제가 없는 것 같습니다.
데이터베이스 문제인가요? 액세스 권한을 생성했는데 로그인에 실패했습니다!
데이터베이스 문제가 아닌가요(내 데이터베이스에 비밀번호가 설정되지 않은 액세스 권한이 있으며 도움말에 있는 데이터베이스의 경우에도 마찬가지임)? 리포트 형식 파일의 문제가 아닌가요? (두 파일의 원본 코드가 동일한 것으로 잘 분석해봤습니다.)
그렇다면 문제는 어디서 발생하는가? 나는 그것을 이해할 수 없다!
2단계: 도움말 파일 찾기 그래서 다시 도움을 요청했습니다. Crystal Reports의 도움으로 검색한 결과 마침내 "Access Secure Database [C#]"라는 단어를 발견하고 다음 단락을 발견했습니다.
Visual Studio .NET용 Crystal Reports를 통해 보안 데이터베이스에 액세스하는 프로세스는 Web Forms와 Windows Forms 간에 다릅니다. Windows Forms에서는 사용자에게 사용자 이름과 비밀번호를 묻는 대화 상자가 자동으로 표시됩니다(테스트는 쉽게 성공합니다). Web Forms에서는 사용자로부터 이 정보를 얻기 위한 양식을 디자인해야 합니다. 두 경우 모두 코드를 사용하여 사용자 이름과 비밀번호를 지정하여 애플리케이션의 모든 사용자에게 동일한 수준의 보안을 제공할 수 있습니다.
그래서 동일한 데이터베이스를 사용했습니다(먼저 도움말 예제의 액세스 데이터베이스를 사용하고 나중에 제가 만든 액세스 데이터베이스를 사용했습니다). 동일한 보고서 파일에 대해 winform은 성공을 표시할 수 있지만 webform은 여전히 로그인 실패를 표시하는 것으로 나타났습니다! 그래서 무슨 뜻인지 좀 이해가 되네요!
권한 설정에 문제가 있는 것 같습니다.
3단계: 도움을 얻기 위해 연구하고 마침내 성공합니다!
도움말에서 "데이터베이스 로그인 매개변수 설정"이라는 단어를 발견했는데, 이 단어는 나중에 매우 유용한 정보를 제공했습니다.
다음 예에서는 로그인 매개변수를 보고서 테이블에 전달하는 방법을 보여줍니다. 이 예에서는 보안 SQL Server 데이터베이스에 대한 연결을 사용합니다.
새 프로젝트를 시작하고 Button과 네 개의 TextBox 컨트롤을 양식에 추가합니다.
텍스트 상자 컨트롤의 이름을 serverNameTxt, dbNameTxt, userNameTxt 및 PasswordTxt로 지정합니다.
Click 이벤트에 대한 코드를 지정하려면 Button 컨트롤을 두 번 클릭합니다. 사용된 언어에 따라 적절한 코드를 삽입하십시오.
[기음#]
//필요한 변수를 선언합니다.
TableLogOnInfo logOnInfo = 새로운 TableLogOnInfo();
int i = 0;
// 보고서의 각 테이블을 반복합니다.
for (i=0;i == Report.Database.Tables.Count - 1;i++)
{
//현재 테이블의 연결 정보를 설정한다.
logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text;
logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text;
logOnInfo.ConnectionInfo.UserID = userNameTxt.Text;
logOnInfo.ConnectionInfo.Password = 비밀번호Txt.Text;
Report.Database.Tables [i].ApplyLogOnInfo(logOnInfo);
}
Microsoft Access 및 Paradox와 같은 비밀번호로 보호 된 PC 데이터베이스 도이 방법을 사용하지만 logoninfo.servername 및 logoninfo.databaseName은 비어 있어야합니다.
그래서 나는 이것을 시도하고 오류 메시지를 받았습니다. tablelogoninfo와 보고서는 찾을 수 없었습니다.
나중에 TableLogonInfo가 CrystalDecisions.shared 네임 스페이스의 구성원임을 발견했습니다. 그래서 나는 인용문을 추가했습니다.
chrimsalcisions.shared 사용;
이번에는 문제가 보고서에서 발생했습니다.
보고서? 이것은 무엇입니까?? 나는 모든 도움을 모두했지만 그러한 기능이나 클래스는 없습니다!
[진지하게! 이 문제는 오랫동안 나를 괴롭 혔습니다! 나는 보고서가 무엇인지 찾고 있었다! Waterscape Report Company도 정말 도움이되며 자세히 쓰지 않습니다! 싸울 시간입니다! ! ! ]
결국, 나는 보고서가 시스템 자체의 객체가 아니라 사용자 정의 객체 일 뿐이라는 것을 알았습니다.
내가 혼란 스러웠을 때, 나는 갑자기 생각했다. 왜 보고서의 데이터베이스를 살펴 보지 않겠습니까? 마침내 문제가 해결 되었습니까?
reportDocument orpt = new ReportDocument ();
보고서는 DocumentCrystalDecisions.crystalReports.engine 클래스의 회원입니다.
코드를 수정하고 참조를 추가하십시오
TableLogonInfo 클래스 해석을 담당하는 Chrystaldecisions.shared; // 사용
CrystalDecisions.CrystalReports .engine; // reportDocument 클래스 해석을 담당하는 책임자 Private void page_load (Object Sender, System.EventArgs e)
{
tableLogonInfo logoninfo = 새로운 tableLogonInfo ();
// reportDocument 객체 보고서는 미리 선언해야하며 데이터 보고서를 동시에로드해야합니다.
reportDocument orpt = new ReportDocument ();
orpt.load ( "c : \ inetpub \ wwwroot \ exer \ pagelet \ crystal \ cr1.rpt"); // 자신의 위치 변경 //
보안 정보 생성
// Microsoft Access 및 Paradox와 같은 비밀번호로 보호 된 PC 데이터베이스 도이 방법을 사용하지만 logoninfo.servername // 및 logoninfo.databaseName은 비워야합니다.
logoninfo.connectioninfo.servername = "www";
logoninfo.connectioninfo.databaseName = "Archives";
logoninfo.connectioninfo.userid = "sa";
logoninfo.connectioninfo.password = "123456
"
;
CrystalReportViewer1.ReportSource = orpt;
}
보고서 파일이 마침내 나타납니다!
와우, 나는 너무 행복해서 도와 줄 수는 없지만 일어 서서 스트레칭했습니다!
4 단계 : 코드의 최종 완전한 버전에는 시스템 확장 성과 유연성이 없습니다. 두 가지 단점이 있습니다.
(1) 데이터 보고서 형식 파일은 절대 경로를 사용합니다.
(2) 데이터베이스 액세스 권한이 설정되면 특히 최종 릴리스에서 수정할 수 없으므로이 고려 사항을 기반으로하는 프로그램 환경과 동일합니다. 두 가지 더 나은 것을 소개합니다.
(1), Server.mappath 함수
(2) web.config 읽기 (이 예제는 또한 web.config 구성 파일을 작동하는 방법을 알려줍니다)
최종 수정은 다음과 같습니다. (완료 코드) 데이터베이스는 SQL Server2000입니다.
TableLogonInfo 클래스 해석을 담당하는 Chrystaldecisions.shared; // 사용
CrystalDecisions.CrystalReports .engine; // reportDocument 클래스 해석을 담당하는 책임자
Private void page_load (Object Sender, System.EventArgs e)
{
tableLogonInfo logoninfo = 새로운 tableLogonInfo ();
// reportDocument 객체 보고서는 미리 선언해야하며 데이터 보고서를 동시에로드해야합니다.
reportDocument orpt = new ReportDocument ();
// .rpt 파일의 실제 경로를 가져옵니다
문자열 path1, path2;
path1 = server.mappath ( " \ exer \ pagelet ");
Path2 = path1+" \ crystal \ cr1.rpt ";
//orpt.load("c: inetpubwwwwwroot\ exer\pagelet \ cr1.rpt ");
orpt.load (path2);
// web.config에서 logoninfo 매개 변수 정보를 얻습니다
문자열 a, b, c, d;
// ServerName을 가져옵니다
a = system.configuration .configurationSettings .appsettings [ "servername"];
// DatabaseName을 가져옵니다
b = system.configuration .configurationSettings .appsettings [ "데이터베이스"];
// userID를 얻습니다
c = system.configuration .configurationsettings .appsettings [ "userId"];
// 비밀번호를 얻습니다
d = system.configuration .configurationsettings. Appsettings [ "Pass"];
// logonInfo 매개 변수를 설정합니다
logoninfo.connectioninfo.servername = a;
logoninfo.connectioninfo.databaseName = b;
logoninfo.connectioninfo.userid = c;
=
d
;
CrystalReportViewer1.ReportSource = orpt;
}
전체 데모 과정에 대한 설명 :
1. 보고서 파일을 저장 해야하는 솔루션 탐색기에서 새 항목을 추가
2. 이후에 나타나는 "보고서 전문가"에서 데이터 소스를 선택할 때 OLE DB를 선택한 다음 데이터베이스의 요구 사항에 따라 해당 구동 엔진을 선택하십시오.
SQL Server : SQL Server 용 Microsoft Ole DB 제공 업체
액세스 : Microsoft Jet.4.0
3. 올바른 데이터베이스 연결을 입력하면이 단계에서 실수를하지 않습니다.
4. 데이터 보고서 작성 및 CR1.RPT 파일 저장
5. Open WebForm1.aspx. CrystalReportViewer 컨트롤 추가 : 이름 : CrystalReportViewer1
6. webform1.aspx.cs의 page_load 이벤트에서 위의 코드를 추가하십시오.
(참고 : 인용하는 것을 잊지 마십시오!)
************************************************** ****
다음은 web.config 의이 컨텐츠와 관련된 세부 사항입니다.
<앱 설정>
<키 = "데이터베이스"value = "Archives"add./>
***
// 비밀번호를 얻습니다
d = system.configuration .configurationsettings. Appsettings [ "Pass"]; AppSettings [ "Pass"]의 "Pass"는 일관성이 유지됩니다. 물론 원하는 이름을 선택할 수 있지만 일관성이 있어야합니다.
http://www.cnblogs.com/zhangyd1080/archive/2006/11/15/561770.html