2011-08-23 4 views
4

MVC3 응용 프로그램에서 보고서를 생성해야합니다. mvc3에서 RDLC를 어떻게 사용할 수 있습니까? 누구든지 내 MVC3 응용 프로그램에서 RDLC 보고서를 작성하기 위해 따라야 할 예시적인 설명과 지침을 제공 할 수 있습니다.mvc3 응용 프로그램의 RDLC 보고서

감사

+0

RDL 일 수 있습니까? 아니면 rdlc 여야합니까? –

+1

RDLC 여야 함 – ziaullah

답변

4

나는 최근 Excel 스프레드 시트에 결과를 수출하는 MVC3 App에서 RDLC 보고서를 사용했다.

private class ExcelReport 
    { 
     private string encoding; 
     private string[] streams; 
     private Warning[] warnings; 
     private string fileNameExtension; 
     private string mimeType; 
     public ExcelReport() 
     { 
      this.ReportDataSources = new List<ReportDataSource>(); 
     } 
     public string ExportFileName { get; set; } 
     public string MimeType 
     { 
      get 
      { 
       return mimeType; 
      } 
      private set 
      { 
       mimeType = value; 
      } 
     } 
     public string Encoding 
     { 
      get 
      { 
       return encoding; 
      } 
      private set 
      { 
       encoding = value; 
      } 
     } 
     public string FileNameExtension 
     { 
      get 
      { 
       return fileNameExtension; 
      } 
      private set 
      { 
       fileNameExtension = value; 
      } 
     } 
     public string[] Streams 
     { 
      get 
      { 
       return streams; 
      } 
      private set 
      { 
       streams = value; 
      } 
     } 
     public Warning[] Warnings 
     { 
      get 
      { 
       return warnings; 
      } 
      private set 
      { 
       warnings = value; 
      } 
     } 
     public string ReportPath { get; set; } 

     public IList<ReportDataSource> ReportDataSources { get; set; } 
     public byte[] GetReport() 
     { 

      LocalReport localReport = new LocalReport(); 
      localReport.ReportPath = this.ReportPath; 

      foreach (var source in this.ReportDataSources) 
      { 
       localReport.DataSources.Add(source); 
      } 

      string reportType = "Excel"; 

      //The DeviceInfo settings should be changed based on the reportType    
      //http://msdn2.microsoft.com/en-us/library/ms155397.aspx    
      string deviceInfo = 
       "<DeviceInfo>" + 
       " <OutputFormat>Excel</OutputFormat>" + 
       " <PageWidth>21cm</PageWidth>" + 
       " <PageHeight>29cm</PageHeight>" + 
       " <MarginTop>1cm</MarginTop>" + 
       " <MarginLeft>2cm</MarginLeft>" + 
       " <MarginRight>2cm</MarginRight>" + 
       " <MarginBottom>1cm</MarginBottom>" + 
       "</DeviceInfo>"; 


      //Render the report    
      return localReport.Render(
       reportType, 
       deviceInfo, 
       out mimeType, 
       out encoding, 
       out fileNameExtension, 
       out streams, 
       out warnings 
      ); 
     } 
    } 

컨트롤러

public ActionResult GetReport(string reportParameter1) 
    { 
     /*Get data for your report that matches the dataset format in the report.*/ 
     IEnumerable<ReportData> list = new IEnumerable<ReportData> /*Your Report Data*/ 
              { 
              new ReportData{Id = 1, Code="ABC"}, 
              new ReportData{Id = 2, Code="DEF"} 

              }; 
     var excelReport = new ExcelReport 
     { 
      ExportFileName = "Your File Name", 
      ReportPath = Server.MapPath("~/Content/Reports/YourReport.rdlc") 

     }; 
     var ds = new ReportDataSource("Main", list); /* Main is the name of the dataset inside the report*/ 
     excelReport.ReportDataSources.Add(ds); 

     var report = excelReport.GetReport(); 

     Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.{1}", excelReport.ExportFileName, excelReport.FileNameExtension)); 
     Response.ContentType = "application/vnd.ms-excel"; 

     return File(report, excelReport.MimeType); 
    } 

최종 결과는 엑셀 docuemnt로 보낸 보고서되어야한다.

0

위의 예와 같이 수동으로 보고서를 생성해야합니다. Acrobat을 먼저 다운로드하지 않고 브라우저에서 볼 수 있도록 pdf를 사용할 수 있습니다.

4

이것은 간단한 작업이 아닙니다! 여기에 6 단계를 거쳐야합니다.

1

가 시작 당신의 Web.config를 열고 <compilation> 태그 내에서 <system.web> 섹션에 다음

<httpHandlers> 
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    validate="false" /> 
</httpHandlers> 

과 다음을 추가하려면의 Web.config는 다음을 추가 :

<buildProviders> 
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </buildProviders> 

다음 <system.webServer> 태그 안에이 추가 :백99경2천9백67조6백8억2천97만3천2백10

<handlers> 
    <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</handlers> 

또한 Microsoft.ReportViewer.Common.dll뿐만 아니라 Microsoft.ReportViewer.WebForms.dll (버전 10.0.0.0)에 대한 레퍼런스를 추가한다.

2의 Global.asax는

당신의 Global.asax.cs을 열고 RegisterRoutes에() 함수는 다음을 추가 :

//Reports Viewers depend on Viewstate so are hosted in class ASPX web forms, so bypassing MVC3 routing 
routes.IgnoreRoute("ReportViewer/"); 

당신이이 일을하는 동안은, 새로운를 만듭니다 폴더 asp.net 응용 프로그램에서 "ReportViewer"라는.

3. XSD 데이터 세트

프로젝트 폴더의 루트에 새 XSD 파일을 만듭니다 (예,이 루트해야합니다!).

프로젝트를 마우스 오른쪽 단추로 클릭하고 "새 데이터 세트 추가"를 클릭하십시오. 그것은 비어 있어야합니다.

오른쪽

은 데이터베이스 연결 문자열을 선택 ... 그것을 클릭하고, TableAdapter에 추가로 이동합니다. 앱 구성에 저장하십시오. 기존 저장된 프로 시저를 사용하십시오. SELECT 쿼리를 사용하여 데이터 집합을 채 웁니다. 데이터 집합에 의미있는 이름을 지정하십시오.

4. 당신의 RDLC 보고서

가 (이에 대한 BI 도구가 필요합니다), 그리고 '데이터 집합을 추가 "갈 새로운 RDLC 보고서 파일을 만듭니다. 새 데이터 세트를 선택하십시오. 보고서를 작성하십시오. 데이터 세트 이름을 기록하십시오. (예를 들면, "을 DataSet1는"더 유용 뭔가 나중에 변경해야합니다.)

5. 설정을

가 새 ASP.NET WebForm에 만들기 ASPX 페이지, 그래, 웹 양식이라는 제목의 페이지 ShowReport를 .aspx. html로는 다음이 있어야합니다 귀하의 reports.aspx.cs에 대한 코드 숨김 내

<body> 
<form id="form1" runat="server" > 
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
    <rsweb:ReportViewer 
     ID="ReportViewer1" 
     SizeToReportContent="False" 
     Width="820px" 
     Height="820px" 
     runat="server" 
     ShowRefreshButton="false" 
     AsyncRendering="false" 
     DocumentMapCollapsed="True" 
     PageCountMode="Actual" 
     PromptAreaCollapsed="True"></rsweb:ReportViewer> 
</form> 
</body> 

6. Codebehind가

을, 이렇게 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
       DataSet dataset = GetPopulatedDatasetFromDB() // Populate your dataset here by calling the stored proc. 

       ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local; 
       ReportViewer1.LocalReport.ReportPath = Server.MapPath("/Reports/MyNewReport.rdlc"); 
       ReportViewer1.LocalReport.DataSources.Clear(); 
       ReportViewer1.LocalReport.DataSources.Add(
        new Microsoft.Reporting.WebForms.ReportDataSource("DataSet1", dataset.Tables[0])); 

       ReportViewer1.LocalReport.Refresh(); 
     } 
    } 

를 방문 페이지를 :

http://localhost/MyApp/ReportViewer/ShowReport.aspx

Voila!

관련 문제