이 문서에서는 독자가 Visual Studio 2005 IDE 에 대한 초보적인 이해를 가지고 있으며 C# 으로 코드를 작성할 수 있다고 가정합니다. 그들이 MS Reporting Services 를 이해하는지는 중요하지 않다. 물론, 이전에 비슷한 보고서를 쓰면 더 빨리 시작할 수 있다. 좋아, 소매를 걷어 올리고 시작할 준비를 하자!
그림 1 을 보십시오. 이 보고서는 얼마나 복잡합니까? 완료하는 데 얼마나 걸릴까요? 복잡성의 측면에서 볼 때, 그것은 단지 단순할 뿐, North Wind->; 제품에서 추출된 보고서 (SQL server 2000); 시간으로 볼 때, 나는 너를 꼬박 한 시간도 걸리지 않을 것이라고 믿는다.
그림 1
다음으로 보고서 작성을 시작하겠습니다. 먼저 c # 애플릿을 작성하여 보고서를 생성해야 합니다.
1: Windows 응용 프로그램을 만듭니다.
파일 메뉴, 새로 만들기-프로젝트를 선택하고 프로젝트 유형에서 C#, 오른쪽 대화 상자에서 Windows 응용 프로그램을 선택합니다. 이름 열에서 프로그램 용도를 나타내는 이름을 사용하는 것이 좋습니다. [위치] 열에서 저장할 디렉토리를 기록해 둡니다. 완료되면 프로젝트에 Form 1 이 있으며 양식 디자이너부터 시작합니다.
Form 1 의 속성을 다음과 같이 수정합니다. 물론 개인 취향에 따라 다른 속성을 수정할 수도 있습니다.
양식 1. Text = "스마트 클라이언트가 있는 ms reporting services101"
양식 1. 크기 = 750,300
2 단계: 양식에 crystalreportviewer 를 추가합니다.
Crystalreportviewer 란 무엇입니까? DVD 를 보려면 DVD 플레이어가 필요한 것처럼 보고서를 미리 보려면 crystalreportviewer 가 필요합니다.
보고서를 처음 쓴 사람에게 crystalreportviewer 는 보고서 생명을 부여했다고 할 수 있다. 출력을 미리 볼 수 있을 뿐만 아니라 PDF, Excel 등 다양한 형식으로 보고서 정보를 생성하는 데도 도움이 됩니다. ) 를 입력하고 인쇄합니다.
Crystalreportviewer 컨트롤을 Form 1 에 배치하려면 다음 단계를 따르십시오.
도구 상자-데이터 -crystalreportviewer 를 찾아 Form 1 으로 끕니다. 이렇게 하면 reportViewer 1 이라는 새 인스턴스가 생성됩니다.
ReportViewer 1 을 설정하여. Dock = Fill, crystalreportviewer 는 보고서를 표시하기 위해 양식의 전체 영역을 채웁니다.
첫 번째 단계와 두 번째 단계를 완료한 후 프로젝트는 그림 2 와 같아야 합니다.
그림 2
단계 3: 프로젝트에 데이터 세트 추가.
데이터 세트에는 crystalreportviewer 가 있습니다. C# 프로그램에서 처리하거나 내보낼 수 있는 데이터 소스의 원시 데이터를 저장하고 제공합니다.
다음 단계에 따라 데이터 세트를 추가합니다.
솔루션 탐색기에서 Add-New Project-Dataset 를 선택하고 이름을 DataSet 1 으로 dsProduct 로 변경한 다음 Add 를 클릭하여 완료합니다.
새로 작성한 데이터 세트에 데이터 테이블을 추가합니다. 데이터 테이블은 기본적으로 보고서 데이터를 로드하는 데 사용되며 보고서를 디자인할 때 DataSet/DataTable 의 관련 정보를 사용합니다.
다음은 데이터 세트 (dsProduct) 에 데이터 테이블을 추가하는 것입니다.
솔루션 탐색기에서 dsProduct 를 두 번 클릭하면 디자인 뷰가 열리고 마우스 오른쪽 버튼을 클릭한 다음 Add-Datasheet 를 선택합니다. 그런 다음 제목을 클릭하여 그림 3 과 같이 이름을 dtProductList 로 변경합니다.
그림 3
다음으로 데이터 테이블 (dtProductList) 에 열을 추가하는 작업을 시작합니다. 이때 디자인 뷰는 그림 4 와 같아야 합니다. DtProductList 를 마우스 오른쪽 단추로 누르고 추가-열을 선택합니다.
그림 4
위 단계를 반복하여 다음을 추가합니다.
제품명 (문자열)
QuantityPerUnit (문자열)
단가 (2 배)
단위 재고 (배정도)
UnitValue (Double): UnitsInStock * UnitPrice 를 기반으로 한 계산된 필드.
열을 추가할 때 기본값은 문자열 데이터 유형입니다. 추가했으면 속성 창으로 이동하여 해당 열을 Double 유형으로 변경합니다.
그림 5 를 보십시오. 지금 데이터시트는 이렇습니다. 또한 속성 창을 보고 데이터 유형을 수정할 수 있습니다.
그림 5
4 단계: 프로젝트에 대한 보고서 추가.
지금까지 crystalreportviewer 와 데이터 세트를 추가하는 프로젝트를 만들었습니다. 이제 깔끔하고 아름다운 보고서를 만들 때가 되었다.
다음 단계에 따라 보고서 (rptProductList.rdlc) 를 생성해야 합니다.
솔루션 리소스 탐색기에서 추가-새 프로젝트-보고서를 선택하고 Report 1.rdlc 의 이름을 rptProductList.rdlc 로 변경한 다음 추가를 클릭하여 완료합니다.
이 프로젝트는 그림 6 과 같을 수 있습니다. 보고서를 추가한 후 데이터 세트를 사용하여 디자인을 시작할 수 있습니다.
그림 6
보고서를 처음 디자인하는 초보자든 베테랑이든 헤더 (또는 헤더), 바닥글, 테이블 등 세 가지 기본 보고서 영역을 처리해야 합니다. 일반적으로 보고서를 디자인할 때는 종이의 크기, 조판 방법 등 초안이 있어야 한다. , 보통 편지지 크기, 수직 행. 물론, 일을 시작하기 전에 종이에 스케치를 그릴 수 있다면 더 좋을 것이다. 그림 1 을 뒤돌아 볼 수 있습니다. 머리글에서는 보고서 이름과 날짜를 사용할 수 있습니다. 테이블 양식에는 제품 관련 정보 목록이 있고 바닥글에는 페이지 번호가 있습니다.
제목부터 시작하겠습니다. 프로젝트에 새 보고서를 추가하면 기본적으로 report designer 에서는 테이블 본문만 표시됩니다. Report designer 테이블 외부를 마우스 오른쪽 단추로 누르고 머리글을 선택합니다. 이렇게 하면 보고서에 헤더가 추가되므로 헤더의 높이와 테이블 영역을 자유롭게 조정할 수 있습니다. 그림 7 을 보면 테이블 높이가 낮아지고 헤더 높이가 증가합니다.
그림 7
보고서 디자이너의 도구 상자에서 보고서를 디자인하는 데 사용되는 다양한 컨트롤을 볼 수 있습니다. 이 예에서는 텍스트 상자, 선 및 테이블 컨트롤을 사용합니다. 이제 우리는 머리말을 디자인하기 시작했습니다. 두 개의 텍스트 상자를 끌어서 제목 영역에 놓습니다. 텍스트 상자에는 정적 및 동적 데이터가 표시될 수 있으며 행 컨트롤은 머리글과 본문 영역을 구분하는 데 사용됩니다. 컨트롤을 배치한 후 해당 속성을 수정하여 필요한 값을 표시할 수 있습니다. 예를 들어, 한 텍스트 상자는 보고서 제목으로 지정하고 다른 텍스트 상자는 현재 날짜를 표시할 수 있습니다. 텍스트 상자를 선택한 후 정적 텍스트를 직접 입력할 수 있습니다.
제목 텍스트 상자를 다음과 같이 수정합니다.
Value = "제품 목록"
색상 = 자주색
날짜 텍스트 상자가 다음과 같이 수정되었습니다.
Value = "실행 데이터:"& 오늘
색상 = 자주색
[span] 날짜 텍스트 상자의 Value 속성은 기호 "=" 로 시작합니다. 즉, 단순한 정적 텍스트가 아니라 문자열 "실행 날짜" 와 오늘의 VB.NET 스크립트의 결과입니다.
또한 보고서의 모든 객체에 임의의 이름을 지정할 수 있습니다. 일반적으로 대부분의 컨트롤의 경우 기본 이름을 유지하는 것이 좋습니다. 여기서 제목 텍스트 상자의 이름 (name 속성) 은 "txtTitle" 로 지정됩니다.
그림 8 을 참조하십시오. 제목 설계가 완료되면 다음과 같이 나타나야 합니다.
그림 8
지금은 몸입니다. 표체는 정보를 전달하는 상세 영역이며 전체 보고서의 가장 중요한 부분입니다. 보고서가 프로젝트에 추가될 때 양식이 자동으로 추가되는 것을 볼 수 있습니다. 위에 컨트롤을 넣기만 하면 됩니다.
일반적으로 body 영역은 상세 데이터 (이 경우 제품 정보) 를 표시하는 데 사용되며 일반적으로 여러 줄 정보입니다. 보고서의 데이터가 증가하면 본문 면적이 그에 따라 늘어나지만 일반적으로 보고서는 한 페이지 (편지지 또는 A4 용지 크기) 로만 설계됩니다.
테이블 영역에서 가장 일반적으로 사용되는 세 가지 컨트롤인 테이블, 행렬 및 리스트가 있습니다. 이 예에서는 테이블 컨트롤을 사용합니다. 보고서 디자인 인터페이스에서 테이블 본문 영역 위로 테이블 컨트롤을 끌면 머리글, 테이블, 바닥글 등의 레이블이 지정된 세 개의 행과 세 개의 열이 있는 테이블이 생성됩니다.
양식 컨트롤이 단지 TextBox 의 조합일 뿐이라는 것을 알았을 때, 조금 놀랍지 않습니까? 또한 테이블의 각 셀은 텍스트 상자와 동일합니다. 즉, 정적 텍스트를 입력하거나 동적 표현식을 지정할 수 있습니다.
테이블 영역 설계를 시작하기 전에 두 개의 열을 더 추가해야 합니다 (우리 보고서에는 다섯 개의 열이 있음). 열을 추가하는 것은 매우 간단합니다. 다음 단계만 수행하면 됩니다.
1. 테이블 영역에서 테이블 컨트롤을 선택합니다.
2. 맨 오른쪽 열의 헤딩을 마우스 왼쪽 버튼으로 클릭합니다 (오른쪽에서 신규 열을 추가하는 것으로 가정).
3. 헤딩을 마우스 오른쪽 버튼으로 클릭하고 오른쪽에 열 삽입을 선택합니다.
이제 보고서는 그림 9 와 같아야합니다. 열의 데이터에 따라 열의 폭을 자유롭게 조정할 수 있습니다.
그림 9
여러분 대부분은 엑셀 (Excel) 이나 이와 비슷한 것을 사용해 보셨을 겁니다. Table 컨트롤을 테두리 유형을 선택하고 모든 셀의 글꼴을 변경하는 등의 작업을 수행할 수 있는 미니 워크시트로 간주할 수 있습니다. 그래서 해야 할 일은 이전에 생각했던 형식에 따라 양식을 디자인하는 것이다.
첫 번째 열부터 시작 하자, 다음 각 열은 동일 합니다. 맨위 셀을 누르고 다음을 입력합니다.
헤더 1: "제품명"
제목 2: "포장"
제목 3: 단가
제목 4: 재고 uom
제목 5: "주식 가치"
다음 상세 데이터 영역 (이전 상세 정보) 에서는 dsProduct.dtProductInfo 의 열인 표현식을 입력해야 합니다. 여기서 표현식을 수동으로 입력하거나 데이터 소스 도구상자에서 끌어다 놓을 수 있습니다 (그림 7 의 왼쪽 참조).
수동으로 입력하려면 데이터 영역의 첫 번째 열에서 마지막 열까지 셀을 누르고 다음을 입력합니다.
Detail 1:" = 필드! ProductName. 가치 "
상세 정보 2:" = 필드! QuantityPerUnit. 가치 "
상세 정보 3:" = 필드! UnitsInStock. 가치 "
세부 정보 4:" = 필드! 단가. 가치 "
상세 정보 5:" = 필드! UnitsInStock. 값 * 필드! 단가. 가치 "
디테일 5 는 재고 단위와 단위 가치를 곱한 출력입니다. 또한 테이블 컨트롤의 데이터 영역으로 열을 끌면 헤더가 비어 있는 경우 헤더가 자동으로 추가된다는 점도 경고합니다.
마지막으로 테이블 컨트롤의 바닥글에 누적 열을 추가하고 테이블 영역에서 열 4 와 5 의 바닥글 셀을 선택한 다음 다음을 입력합니다.
셀 4: 합계: "
셀 5: "= 합계 (필드! UnitsInStock. 값 * 필드! 단가. 값) "
내장 SUM () 함수를 사용하여 누적 결과를 가져오는 5 셀을 누릅니다.
마지막으로 바닥 글 영역만 남았습니다. C# 코드 작성을 시작하기 전에 이전에 보고서 헤더를 추가한 것처럼 보고서 바닥글을 완료해야 합니다. 열린 report designer 에서 그림 7 과 같이 마우스 오른쪽 단추를 누르고 바닥글을 선택합니다.
Line 및 TextBox 컨트롤을 바닥글 영역으로 끌어다 놓고 TextBox 에 다음 표현식을 입력합니다.
값: = "페이지:" & 글로벌! 페이지 번호& "/"& 글로벌! 총 페이지 수
보시다시피 여기서는 PageNumber 와 TotalPages 를 사용합니다. 모두 글로벌 변수입니다.
이제 보고서는 10 과 같이 표시되어야 합니다. 여기서 색깔이 조금 달라졌다. 숫자 데이터를 오른쪽으로 정렬하고 테이블을 Excel 워크시트로 처리합니다. 너는 마음대로 네가 원하는 모양으로 조정할 수 있다.
그림 10
거의 다 됐어요! 나머지는 표현식 생성기입니다. Expression builder 는 Reporting Services 에서 매우 강력한 도구입니다. 1 1 과 같이 주식 가치는 SUM 함수에 의해 계산되며 DateSet 의 모든 데이터는' Fields!' 를 사용할 수 있습니다 키워드 액세스.
그림 1 1
단계 5: 보고서에 생명력을 부여하는 C# 코드 작성
솔루션 탐색기에서 Form 1 을 선택하고 마우스 오른쪽 버튼을 클릭한 다음 코드 보기를 선택하여 Form 1_Load 에 다음 코드를 추가합니다.
시스템을 사용하다. Data. SqlClient
마이크로소프트를 사용하다. 보고서. WinForms
개인 void Form 1_Load (개체 발신자, 이벤트 e)
{
//연결 문자열 선언
String cnString = @ "(로컬); 초기 디렉터리 = northwind+ "사용자 Id = northwind 암호 = northwind";
//표준 보안 속성을 사용하는 경우 다음 코드로 변경합니다.
//string cnString = @ "데이터 소스 = (로컬); 초기 디렉터리 = northwind 통합 보안 = sspi ";
//연결, 명령 개체 및 기타 관련 개체를 선언합니다.
Sqlconnectionconreport = new sqlconnection (cnstring);
Sqlcommandcmdreport = new sqlcommand ();
Sqldatareader dr 보고서
데이터 세트 dsreport = new dsproduct ();
시도하다
{
//연결 열기
보고서 내용. Open ();
//연결 개체를 준비하고 가져온 데이터를 데이터 세트에 배치합니다.
Cmd 보고서. CommandType = CommandType 입니다. 텍스트;
Cmd 보고서. Connection = conReport
Cmd 보고서. Commandtext = "select top 5 * from products order by product name";
//명령 객체에서 데이터 읽기
DrReport = cmdReport 입니다. Executereader ();
//ADO.NET 을 사용하면 읽은 데이터를 데이터 세트에 직접 로드할 수 있습니다.
DsReport. 양식 [0]. 로드 (dr 보고서);
//읽기 및 연결 끄기
Dr 보고서. 닫기 ();
보고서 내용. 닫기 ();
//뷰어에 로컬 보고서 데이터를 제공합니다.
RpvAbraKaDabra 입니다. Localreport.reportembeddedresource =
"RS win101.rptproduct list.rdlc";
//보고서 데이터 소스 준비
Report data source rds = new report data source ();
Rds. Name = "dsproduct _ dtproductlist";
Rds. Value = dsReport 입니다. 표 [0];
RpvAbraKaDabra 입니다. Localreport.datasources.add (rds);
//crystalreportviewer 를 로드합니다.
RpvAbraKaDabra 입니다. Refresh report ();
}
Catch (예외 ex)
{
//오류 메시지 표시
MessageBox 입니다. 표시 (예: 메시지);
}
마지막으로
{
//연결이 여전히 열려 있는지 확인하고 열려 있는 경우 닫습니다.
If (conReport). State == ConnectionState 입니다. 열기)
{
보고서 내용. 닫기 ();
}
}
}
여기서 "TOP 5" 가 select 쿼리 문에 사용되는 이유를 알고 싶을 수 있습니다. 이것은 단지 데모용이며 출력은 그림 1 과 같은 누적 결과로 제한됩니다. 또한 ReportDataSource 의 Name 속성은 항상 "DataSet_DataTable" 이어야 합니다.
후베이 신블루해는 인터넷 마케팅과 인터넷 보급에 주력하는 선두 기업으로, 우한 건민, 화공 레이저, 강서인 등 여러 유명 기업에 인터넷 마케팅 아웃소싱 서비스를 제공했다. 자세한 내용은 각 주요 검색 엔진에서' 후베이 신블루해' 를 검색해 주세요.