override internal void Run(IPresent ip, Row row)
{
Report r = ip.Report();
base.Run(ip, row);
// need to save the owner report and nest in this defintion
ReportDefn saveReport = r.ReportDefinition;
NeedPassword np = r.GetDataSourceReferencePassword; // get current password
r.SetReportDefinition(_ReportDefn);
r.Folder = _ReportDefn.ParseFolder; // folder needs to get set since the id of the report is used by the cache
r.GetDataSourceReferencePassword = np;
DataSourcesDefn saveDS = r.ParentConnections;
if (this.MergeTransactions)
{
r.ParentConnections = saveReport.DataSourcesDefn;
}
else
{
r.ParentConnections = null;
}
r.SubreportDataRetrievalTriggerEvent();
if (_Parameters == null)
{ // When no parameters we only retrieve data once
if (r.Cache.Get(this, "report") == null)
{
r.RunGetData(null);
if (!r.IsSubreportDataRetrievalDefined) // if use has defined subreportdataretrieval they might
{
r.Cache.Add(this, "report", this); // set the data; so we don't cache
}
}
}
else
{
SetSubreportParameters(r, row);
r.RunGetData(null);
}
ip.Subreport(this, row);
r.SetReportDefinition(saveReport); // restore the current report
r.ParentConnections = saveDS; // restore the data connnections
}