mvc3应用程序中的RDLC报告

时间:2011-08-23 05:43:05

标签: c# asp.net asp.net-mvc-3

需要在我的MVC3应用程序中生成报告,如何在mvc3中使用RDLC。任何人都可以给我一个示例性的解释和指导,以便在我的MVC3应用程序中创建RDLC报告。

感谢

4 个答案:

答案 0 :(得分:4)

我最近在MVC3应用程序中使用RDLC报告将结果导出到Excel电子表格中。

    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);
    }

最终结果应该是您报告导出为ex​​cel docuemnt。

答案 1 :(得分:4)

这不是一项简单的任务!以下是您要完成的六个步骤。

<强> 1。的web.config

首先,打开您的web.config并将以下内容添加到<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>

然后在<compilation>标记内添加以下内容:

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

然后在<system.webServer>标记内添加以下内容:

<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数据集

在项目文件夹的ROOT中创建一个新的XSD文件(是的,它必须是根目录!)。

右键单击您的项目,单击“添加新数据集”。它应该是空的。

右键单击它并转到Add,TableAdapter ......

选择数据库连接字符串。将其保存在应用配置中。使用现有的存储过程。使用SELECT查询填充数据集。为数据集指定一个有意义的名称。

<强> 4。创建您的RDLC报告

创建一个新的RDLC报告文件(您需要使用BI工具),然后转到“添加数据集”。选择新数据集。创建报告。记下数据集名称。 (例如,“DataSet1”,请记住稍后将其更改为更有用的内容。)

<强> 5。设置ASPX页面

创建一个名为ShowReport.aspx的新的ASP.NET WebForm,是的 webform 页面。 HTML应具有以下内容:

<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

在reports.aspx.cs的代码隐藏中,执行以下操作:

    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

瞧!

答案 2 :(得分:0)

您必须手动生成报告,如上例所示。您可能希望使用pdf以便用户可以在浏览器中查看它(如果安装了acrobat),而不必先下载它。

答案 3 :(得分:0)

请按照下面的分隔符:

  1. 创建一个新的RDLC报告文件(为此需要BI工具)。
  2. 转到“添加数据集”,然后选择新的数据集。
  3. 创建报告。记下数据集名称。 (例如,“ DataSet1”,请记住稍后将其更改为更有用的内容。)