Page 1 of 1

Problem with Subreport

Posted: Mon Sep 04, 2017 7:52 am
by MartinRoth
Hi

I have a report called header.mrt which contains the BusinessObject "User", generated as such:

e.Report.RegBusinessObject ("User", MyUser);
e.Report.Dictionary.SynchronizeBusinessObjects (3);

This report is running just fine. But if used as a Subreport, linked by filename in another Report like so

e.Report.Load ("MainReport.mrt")
e.Report.RegBusinessObject ("User", MyUser);
e.Report.RegBusinessObject ("otherData", MyOtherData);
e.Report.Dictionary.SynchronizeBusinessObjects (3);

there is no data shown in the subreport. What am I doing wrong?

TIA
Martin

Re: Problem with Subreport

Posted: Mon Sep 04, 2017 11:44 am
by Alex K.
Hello,

Please send us a sample project which reproduces the issue for analysis.

Thank you.

Re: Problem with Subreport

Posted: Tue Sep 05, 2017 2:19 pm
by MartinRoth
OK, here's a sample as a WebSite project.
First create Header.mrt by calling DesignHeader.aspx. This uses a business object of class MyUser . It has a static instance.

Then create MainReport.mrt by calling DesignMainReport.aspx. It too uses MyUser and some other arbitrary data. Now I added a subreport in the designer. This subreport links to the Header.mrt file on my harddisk (you will need to change the file location, btw. I also tried URL linking, didn't work)

If you view MainReport.mrt with ShowMainReport.aspx the Subreport does not contain any data, as if it doesn't know about MyUser...

Thanks

Edit: I can't attach my zip File. Here's the link: https://drive.google.com/a/dynabyte.ch/ ... sp=sharing

Re: Problem with Subreport

Posted: Thu Sep 07, 2017 5:07 pm
by HighAley
Hello, Martin.

You should register the Business Objects in the sub-report too.
You could do this using the GetSubReport event of the report.
Here is a working code:

Code: Select all

public partial class ShowMainReport : System.Web.UI.Page {
	protected void Page_Load (object sender, EventArgs e) {
		string reportFile = HttpContext.Current.Server.MapPath ("App_Data/MainReport.mrt");
		StiReport report = new StiReport ();
		report.Load (reportFile);

		var cust1 = new Customer ("Test1", "TestCity1", "www.test1.com");
		var cust2 = new Customer ("Test2", "TestCity2", "www.test2.com");
		var cust3 = new Customer ("Test3", "TestCity3", "www.test3.com");
		var list = new List<Customer> { cust1, cust2, cust3 };
		//report.RegBusinessObject ("User", MyUser.Current);
		report.RegBusinessObject ("Customer", list);
		report.Dictionary.SynchronizeBusinessObjects (3);
		List<string> assemblies = new List<string> (report.ReferencedAssemblies);
		assemblies.Add (System.Reflection.Assembly.GetAssembly (typeof (MyUser)).Location);
		report.ReferencedAssemblies = assemblies.ToArray ();
        report.GetSubReport += Report_GetSubReport;
		StiWebViewer1.Report = report;
	}

    private void Report_GetSubReport(object sender, StiGetSubReportEventArgs e)
    {
        string reportFile = HttpContext.Current.Server.MapPath("App_Data/Header.mrt");
        StiReport report = new StiReport();
        report.Load(reportFile);
        report.RegBusinessObject("User", MyUser.Current);
        report.Dictionary.SynchronizeBusinessObjects(3);
        List<string> assemblies = new List<string>(report.ReferencedAssemblies);
        assemblies.Add(System.Reflection.Assembly.GetAssembly(typeof(MyUser)).Location);
        report.ReferencedAssemblies = assemblies.ToArray();
        e.Report = report;
    }
}
Thank you.

Re: Problem with Subreport

Posted: Sat Sep 09, 2017 10:58 am
by MartinRoth
Thanks, this is working nicely

Re: Problem with Subreport

Posted: Mon Sep 11, 2017 4:24 pm
by Alex K.
Hello

We are always glad to help you!
Please let us know if you need any additional help.

Thank you.