需要在我的MVC3应用程序中生成报告,如何在mvc3中使用RDLC。任何人都可以给我一个示例性的解释和指导,以便在我的MVC3应用程序中创建RDLC报告。
感谢
答案 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);
}
最终结果应该是您报告导出为excel 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)
请按照下面的分隔符: