我正在导出报告,我注意到我正在为每个报告复制大量代码。我想把它放在一个单独的类中的方法中,但是我不确定在经过一些研究后如何进行实例化。我的代码如下:
ActiveReport rpt = new Reports.rptContractListing_Merchant();
rpt.Run();
try
{
rpt.Run(false);
}
catch (DataDynamics.ActiveReports.ReportException eRunReport)
{
// Failure running report, just report the error to the user:
Response.Clear();
Response.Write("<h1>Error running report:</h1>");
Response.Write(eRunReport.ToString());
return;
}
XlsExport xls = new XlsExport();
xls.MinColumnWidth = (float)0.5;
xls.Export(rpt.Document, m_stream);
m_stream.Position = 0;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "inline; filename=ContractListing_Merchant.xls");
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
Response.BinaryWrite(m_stream.ToArray());
Response.End();
以下是我不确定反思的部分:
ActiveReport rpt = new Reports.rptContractListing_Merchant();
另一个例子:
ActiveReport rpt = new Reports.rptContractDetails();
try
{
rpt.Run(false);
}
catch (DataDynamics.ActiveReports.ReportException eRunReport)
{
// Failure running report, just report the error to the user:
Response.Clear();
Response.Write("<h1>Error running report:</h1>");
Response.Write(eRunReport.ToString());
return;
}
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "inline; filename=ContractDetails.pdf");
PdfExport pdf = new PdfExport();
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
pdf.Export(rpt.Document, memStream);
Response.BinaryWrite(memStream.ToArray());
Response.End();
答案 0 :(得分:3)
我认为Activator.CreateInstance<T>()
是一种方法,其中T是您正在生成的报告类型
答案 1 :(得分:1)
您有许多选项,其中许多选项甚至不需要反射。
如果可以保证所有报表类都具有“默认”构造函数(没有参数),则可以使用泛型并指定泛型类型必须具有默认构造函数。然后你可以说new T()
。
否则,你可以使用依赖注入来创建基于给定类型的报告,或者你可以让你的方法将Report本身作为参数(必须由调用方法提供),并占用自己的剩余的,重复的代码。
答案 2 :(得分:0)
我刚将rpt对象传递给一个带有代码的方法。它奏效了。