我使用以下代码生成PDF报告:
public partial class Report{
public void myMethode(DataTable DT){
ReportViewer reportViewer1 = new ReportViewer();
reportViewer1.LocalReport.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted));
reportViewer1.LocalReport.ReportPath = @"Something" + ReportName + ".rdlc";
reportViewer1.ProcessingMode = ProcessingMode.Local;
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", DT));
reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SubReportProcessing);
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
reportViewer1.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
}
private static void SubReportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)
{
//do something
}
}
每个主报告都可以正常工作,但是当它想要生成子报告时,它不必调用SubReportProcessing
方法!
那么有人可以帮助我发现问题吗?
我正在使用Dot Net 4.7.2
,也将其用作网络API,并且使用Microsoft.ReportViewer.WebForms
版本12.0.0.0
答案 0 :(得分:1)
我将此事件用于呼叫子报告:
// myMethode Function
reportViewer.Reset();
reportViewer.LocalReport.DataSources.Add(dataSource);
reportViewer.LocalReport.ReportPath = "Report Path";
reportViewer.LocalReport.SubreportProcessing +=
LocalReportOnSubreportProcessing;
reportViewer.LocalReport.Refresh();
private void LocalReportOnSubreportProcessing(object sender,
SubreportProcessingEventArgs e)
{
//Following Code Is just a Sample
switch (e.ReportPath)
{
case "ExamResult1To3Scores":
{
var ranksReportDataSource = new ReportDataSource
{
Name = "ExamResult1To3",
Value = GetCandidatesExamResultGuidanceRequest
};
e.DataSources.Add(ranksReportDataSource);
break;
}
case "ExamResult1To3Chart":
{
var levelRank =
GetCandidatesRequest.First().Guidance1To3ChartData;
var chartReportDataSource = new ReportDataSource
{
Name = "ExamResult1To3Chart",
Value = levelRank
};
e.DataSources.Add(chartReportDataSource);
break;
}
}
我希望您将从规范中受益。