在ASP.NET页面上,当用户从Crystal Report Viewer(CRV)查看报表时,他们可以导出报表(例如,PDF)。导出的默认文件名是CRV的ID。
我想将默认名称设置为基于报告参数的内容。 (例如“2008年的销售”)。
我知道我可以添加一个链接到页面,然后我可以编写一个解决方案,我在代码中生成PDF并将其流式传输到浏览器,但我希望有可能有办法做到这一点水晶报告中的诞生。
答案 0 :(得分:3)
// You could pass the parameters to the web page
// where you have theCrystalReportViewer control
protected void Page_Load(object sender, EventArgs e)
{
string reportId = Request["rid"];
string reportTitle = Request["rtitle"];
ReportDocument reportDocument = HttpContext.Current.Session[reportId] as ReportDocument;
this.CommonCrystalReportViewer.ReportSource = reportDocument;
this.CommonCrystalReportViewer.DataBind();
// Set the default export file name for the report.
this.CommonCrystalReportViewer.ID = reportTitle;
}
答案 1 :(得分:0)
如果您使用Visual Studio 2008创建报告,则可以编辑创建的ReportClass以添加DefaultName属性。
答案 2 :(得分:0)
本地有一个ReportExporter类而不是ReportViewer类,但它不再受支持了。有一些类似的第三部分。
我使用此代码示例:
从报告中获取参数值(如果您还没有从Session,QueryString或其他地方获取)
string myParamName="XXX";
object myParamValue;
foreach (ParameterField field in reportDocument.ParameterFields)
{
if (string.Compare(field.Name.TrimStart('@'), myParamName, true) == 0)
myParamValue= field.CurrentValues;
}
使用报告名称导出
string myReportName = "sales for " + myParamValue.ToString() + ".pdf";
try
{
reportDocument.ExportToHttpResponse(
ExportFormatType.PortableDocFormat
,Response, true, myReportName);
}
catch (System.Threading.ThreadAbortException)
{
//System.Threading.ThreadAbortException is thrown
//because, Response.End is called internally in ExportToHttpResponse method:
}
答案 3 :(得分:-1)
protected void Page_Init(object sender, EventArgs e) {
...
// Set the default export file name for the report.
this.mainReportViewer.ID = reportTitle;
...
}
必须更改reportViewer
函数中的id
Page_Init
,否则无效。