Symptom
- A report is designed with a subreport in a particular section
- At runtime, the subreport may need to be moved to a different section
Resolution
There are two possible solutions
-
-
Keep the subreport saved as a report on your hard drive and insert it into the main report as needed
-
//Get SubreportController object from ReportClientDocument object
SubreportController subRptController = reportClientDocument. getSubreportController();
String name = "GlobalSales.rpt";
String reportURL = "C:\MyReports\GlobalSales.rpt";
//Get the section into which the subreport will be added
ISection footerSection = reportClientDocument.getReportDefController() .findSectionByName
("FooterSection");
//Return the imported existing report as a SubReportClientDocument object
ISubreportClientDocument subRptClientDocument = subRptController. importSubreport(name,
reportURL, footerSection);
}
catch (ReportSDKException e)
{
//do something here
}
2. Move the subreport from section to section
boReportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
boReportDocument.Load(Server.MapPath("SimpleRCAPIReport.rpt"));
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument boReportClientDocument = boReportDocument.ReportClientDocument;
CrystalDecisions.ReportAppServer.Controllers.ReportObjectController boReportObjectController = default(CrystalDecisions.ReportAppServer.Controllers.ReportObjectController);
boReportObjectController = boReportClientDocument.ReportDefController.ReportObjectController;
CrystalDecisions.ReportAppServer.ReportDefModel.ReportObjects boReportObjects = boReportObjectController.GetAllReportObjects;
CrystalDecisions.ReportAppServer.ReportDefModel.ReportObject boReportObject = default(CrystalDecisions.ReportAppServer.ReportDefModel.ReportObject);
boReportObject = boReportObjects.Item("Text1").Clone(true);
//Remove the old object
boReportObjectController.Remove(boReportObjects.Item("Text1"));
CrystalDecisions.ReportAppServer.ReportDefModel.Section boSection = default(CrystalDecisions.ReportAppServer.ReportDefModel.Section);
//pick the new section to put the object in
boSection = boReportClientDocument.ReportDefController.ReportDefinition.ReportFooterArea.Sections(0);
//add the object to the new section
boReportObjectController.Add(boReportObject, boSection);
See Also
Keywords
KBA , BI-DEV-NET-SDK , .NET SDK / COM SDK , How To
Product
Crystal Reports 2008 V1 ; SAP Crystal Reports XI R2
SAP Knowledge Base Article - Public