소개:
이 기사는 어제 Kanyuanzi가 제공한 링크입니다. 누구의 것인지 잊어버렸습니다. http://www.codeproject.com/aspnet/ReportViewer.asp라는 주소가 게시되었다는 것만 기억납니다. 어떤 이유로 번역되지 않았기 때문이라고 말했습니다. 나중에 살펴보니 나에게 유용했습니다. 왜냐하면 회사의 누군가가 RS 관련 작업을 하고 있었고 아래층의 광전자공학 부서에서도 종종 BS에 대한 요구 사항이 있었기 때문입니다. 나는 오랫동안 이에 대해 알고 있었지만 한 번도 그런 적이 없었습니다. 공부할 시간이 있어서 우연히 이 글을 발견하게 되었고, 오후 내내 꼼꼼히 공부하고 먼저 번역한 뒤 통찰력을 추가했습니다.
번역 과정에서 최대한 현지화하려고 노력했지만, 원저자의 뜻은 그대로 유지했습니다. 번역에 잘못된 부분이 있으면 비판해 주시고 정정해 주시기 바랍니다.
인터넷에는 SqlServer RS의 서비스 모드(Server Mode)가 많이 있는데, 특히 매개변수 호출이 있을 때 로컬 모드(Local Mode)를 공부하는데 정말 오랜 시간을 보냈습니다.
서버 모드 대신 로컬 모드를 사용하는 이유는 서비스 모드의 클라이언트가 보고서를 요청할 때마다 서버가 데이터를 보고서로 정리한 후 클라이언트에게 보내야 하기 때문입니다. 서버에서 브라우저로 전송하면 성능이 저하됩니다.
따라서 이 문서에서는 ASP.NET2.0의 ReportViewer 컨트롤을 사용하여 보고서를 구성하고 읽는 방법을 설명합니다. 여기서는 로컬 모드를 선택하고 매개 변수가 있는 저장 프로시저를 사용합니다. 제가 사용하는 것은 ASP.NET2.0, VisualStudio2005, SQLServer2005와 Application Block입니다. Microsoft Application Block 도구가 없는 경우 예제의 SQL 도우미를 통해 저장 프로시저를 호출하는 코드를 SQL 명령으로 바꾸십시오.
여기서는 Northwind 데이터베이스를 선택합니다. 이 예에서는 사용자가 드롭다운 목록에서 제품 이름을 선택한 다음 보고서에서 정보를 필터링하는 것을 보여줍니다.
첫 번째 단계는AS
SELECT Category.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Category INNER JOIN Products ON
Category.CategoryID = Products
매개 변수를
사용 하 여ALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
저장 프로시저를 만드는 것입니다.CategoryID
WHERE CategoryName=@CategoryName
RETURN
두 번째 단계는 DataSet 디자이너를 사용하여 DataSet 아래에 DataTable을 만드는 것입니다.
App_Code 파일을 마우스 오른쪽 버튼으로 클릭하고 "새 항목 추가"를 선택합니다. 팝업 대화 상자에서 "DataSet"을 선택하고 DataSetProducts.xsd와 같은 이름을 지정한 다음 "추가" 버튼을 클릭합니다. 이때 TableAdapter 구성 도구가 자동으로 나타납니다. 표시되지 않거나 실수로 닫힌 경우 DataSet 디자이너의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 추가를 선택한 다음 TableAdapter를 선택하면 도구가 다시 나타납니다. 마법사에 따라 DataTable을 생성하고 나타나는 인터페이스에서 명령 유형으로 "기존 저장 프로시저 사용"을 선택한 다음 선택 명령으로 "ShowProductByCategory"를 지정합니다.
1단계에서 생성된 저장 프로시저는 2단계에서 DataTable이 되며, 이 DataTable을 통해 리포트 데이터가 제공됩니다.
그림 1: DataTable을 포함하는 DataSetProducts.xsd는 보고서의 데이터 소스입니다.
3단계: 보고서 파일을 생성합니다.
솔루션 관리자를 마우스 오른쪽 버튼으로 클릭하고 새 항목 추가를 선택한 다음 보고서 템플릿을 선택합니다. 이 예에서는 기본 이름 Report.rdlc가 직접 사용됩니다. RDL은 보고서 정의 언어를 의미하고 c는 클라이언트를 의미합니다. 즉, rdl은 서버 보고서이고 rdlc는 로컬 보고서입니다.
도구 상자에서 보고서 디자인 양식으로 테이블을 끌어서 놓습니다. 이 "테이블"에는 머리글, 내용 및 꼬리의 세 부분이 있습니다. 테이블은 데이터를 표시하는 영역이고, 영역은 바인딩된 DataSet 아래의 데이터 요소를 표시합니다. 보고서에는 여러 영역이 있을 수 있지만 각 영역은 하나의 DataSet의 내용만 표시할 수 있습니다. 이를 기반으로 저장 프로시저를 사용하여 여러 테이블의 데이터를 DataSet으로 결합하여 보고서를 채울 수 있습니다.
그림 2: 보고서 템플릿 전용 도구 모음의 컨트롤
"Website Data Source" 창을 열고 두 번째 단계에서 생성된 "DataSetProducts" 데이터 세트를 찾습니다. "ShowProductByCategory"라는 DataTable이 나타날 때까지 확장합니다. 이전에 TableAdapter 구성 마법사에서 "기존 저장 프로시저 사용"을 선택했고 저장 프로시저의 이름이 ShowProductByCategory이기 때문에 이 테이블을 이 이름이라고 합니다.
웹 사이트 데이터 원본 창에서 ProductName, UnitPrice 및 UnitsInStock을 보고서 디자이너의 세부 정보를 표시하는 행, 즉 가운데 행의 첫 번째, 두 번째, 세 번째 열로 끌어옵니다. 그리고 표시 세부 정보 행의 필드를 마우스 오른쪽 버튼으로 클릭한 다음 속성 표시줄에서 형식 탭을 찾아 단가 및 재고 단위에 대한 표시 형식을 정의할 수 있습니다.
그림 3. 웹 사이트 데이터 소스 양식에는 프로그램에 정의된 DataSet과 해당 열이 표시됩니다.
4단계: ASP.NET2.0 페이지에 ReportViewer 컨트롤 추가
먼저 DropDownList 컨트롤을 양식으로 끌어온 다음 데이터 소스 옵션을 선택하여 CategoryName 필드를 바인딩합니다. 다른 시나리오에서는 사용자가 텍스트 상자와 같은 다른 방법을 통해 매개 변수를 입력한 다음 저장 프로시저에 전달할 수 있습니다.
그런 다음 보고서 보기 컨트롤을 폼으로 끌고 Visible 속성을 False로 설정합니다. 또 한 가지 주목할 점은 ASP.NET 2.0의 보고서 뷰어는 Excel 및 PDF 내보내기 방법을 제공한다는 것입니다. 그러나 실제 프로세스에서는 인쇄된 보고서와 디자인한 방식 간에 항상 약간의 차이가 있다는 것을 발견했습니다.
그림 4, 이 페이지를 시작 페이지로 설정
다음으로 Report Viewer의 스마트 태그를 호출하고 방금 만든 Report.rdlc 파일을 선택합니다.
그림 5: 보고서 정의 파일을 보고서 뷰어 컨트롤에 결합합니다.
5단계: 사용자가 드롭다운 상자에서 다른 이름을 선택한 다음 보고서에 다른 데이터를 표시할 수 있도록 코드를 작성합니다.
코드 숨김(또는 코드 파일)에 Microsoft.Reporting.WebForms 네임스페이스를 추가하는 것을 잊지 마세요. 파일.
1
시스템 사용;
2System.Data 사용;
3System.Data.SqlClient 사용;
4시스템 구성 사용;
5System.Collections 사용;
6System.Web 사용;
7System.Web.Security 사용;
8System.Web.UI 사용;
9System.Web.UI.WebControls 사용;
10System.Web.UI.WebControls.WebParts 사용;
11System.Web.UI.HtmlControls 사용;
12Microsoft.ApplicationBlocks.Data 사용;
13Microsoft.Reporting.WebForms 사용;
14
15공개 부분 클래스 ReportViewerLocalMode: System.Web.UI.Page
16{
17 공개 문자열 thisConnectionString =
18 구성관리자.연결문자열[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*다음 진술을 사용하여 여러 개가 있는지 표시했습니다.
22개의 입력 매개변수, 숫자로 매개변수 선언
애플리케이션의 매개변수 23개, 예: New SqlParameter[4];
스물넷
25 공개 SqlParameter[] SearchValue = 새 SqlParameter[1];
26
27 protected void RunReportButton_Click(개체 전송자, EventArgs e)
28 {
29 //ReportViewer1.Visible은 디자인 모드에서 false로 설정됩니다.
30 ReportViewer1.Visible = true;
31 SqlConnection thisConnection = new SqlConnection(thisConnectionString);
32 System.Data.DataSet thisDataSet = new System.Data.DataSet();
33 SearchValue[0] = new SqlParameter("@CategoryName",
34 DropDownList1.SelectedValue);
35
36 /**//* 저장 프로시저 결과를 데이터세트에 넣기 */
37 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38 "ShowProductByCategory", 검색값);
39
40 /**//*또는 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "ShowProductByCategory", dropdownlist1.selectedvalue);
42 입력 매개변수가 1개만 있는 경우 */
43
44 /**//* thisDataSet 연결(이제 저장된 데이터 세트로 로드됨)
45 절차 결과) ReportViewer 데이터 소스 포함 */
46 ReportDataSource 데이터 소스 = 신규
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(데이터 소스);
52 if (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "죄송합니다. 이 카테고리에는 제품이 없습니다!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59}
6단계: 보고서를 실행하려면
F5 키를 누르고 "보고서 실행" 버튼을 클릭하여 보고서를 실행합니다.
그림 6, 보고서 실행
마지막으로 ReportViewer가 웹사이트에 도입되었는지 확인하고 web.config 파일을 구성합니다. 형식은 다음과 같습니다.
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=?? ??????????" verify="false" /> ReportViewer 컨트롤이 포함된 웹 사이트 프로젝트를 다른 서버에 배포하는 경우 C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe 파일을 복사해야 합니다. 대상 서버. 번역 경험: 지금까지 해본 번역 중 가장 간단한 번역인 것 같지만, 저자가 상대적으로 간결하고 명확하다고 말했기 때문일 수도 있습니다. 학습 경험: 저자는 ReportViewer에 허용되는 두 가지 보고 방법을 자세히 설명하고 간단한 분석을 수행했습니다. 그러나 실제 프로젝트에서는 더 많은 사람들이 서버 모드를 사용할 수 있으며 로컬 모드는 여전히 너무 크거나 너무 복잡하지 않은 일부 보고서를 생성할 수 있습니다. 회사에 RS만 전문적으로 하는 사람도 있는 걸로 알고 있는데, 실행하면 10분 정도가 보통이고, 30분을 넘으면, 알고리즘 변경을 고려해야 할 수도 있습니다. 무섭게 들리네요 ㅎㅎ 하지만 아래층 태양광 발전 부서의 보고 요구에 사용될 수 있다면 이전 GridView to Excel 방식보다 더 편안하고 싶습니다. 이것이 연구되고 이해될 수 있다면, 더 많은 사람들이 이 컨트롤을 이해할 수 있도록 특별한 소개 영상 설명을 만들 계획입니다.