| ActiveReports 9 > ActiveReports User Guide > Samples and Walkthroughs > Walkthroughs > Section Report Walkthroughs > Layout > Subreports with XML Data |
Using XML data requires some setup that is different from other types of data. This walkthrough illustrates how to set up a subreport bound to the XML DataSource in the parent report.
This walkthrough is split up into the following activities:
![]() |
Note: This walkthrough uses Customer.xml. By default, in ActiveReports, the Customer.xml file is located in the [User Documents folder]\ComponentOne Samples\ActiveReports 9\Samples\Data folder. |
When you complete this walkthrough you get a layout that looks similar to the following at design time and at runtime.
To add an ActiveReport to the Visual Studio project
See Adding an ActiveReport to a Project for information on adding different report layouts.
To connect the Parent Report (rptMain) to a data source
//CUSTOMER.To create a layout for the Parent Report (rptMain)
| Property Name | Property Value |
|---|---|
| Text | Orders by Customer |
| Location | 0, 0 in |
| Size | 6.5, 0.25 in |
| Font | Arial, 14pt, style=Bold |
| Alignment | Center |
TextBox1
| Property Name | Property Value |
|---|---|
| DataField | NAME |
| Location | 1.2, 0 in |
| Size | 2, 0.2 in |
Label1
| Property Name | Property Value |
|---|---|
| Text | Customer Name: |
| Location | 0, 0 in |
| Size | 1.2, 0.2 in |
| Font Bold | True |
Label2
| Property Name | Property Value |
|---|---|
| Text | Orders: |
| Location | 1.2, 0.25 in |
| Size | 1, 0.2 in |
| Font Bold | True |
Subreport
| Property Name | Property Value |
|---|---|
| Location | 2.3, 0.25 in |
| Size | 4, 1 in |
To create a layout for the Child Report (rptSub)
| Property Name | Property Value |
|---|---|
| CanShrink | True |
| BackColor | LightSteelBlue |
![]() |
Tip: Even if you do not want colors in your finished reports, using background colors on subreports can help in troubleshooting layout issues. |
TextBox1
| Property Name | Property Value |
|---|---|
| DataField | TITLE |
| Name | txtTitle |
| Location | 0, 0 in |
| Size | 2.9, 0.2 in |
TextBox2
| Property Name | Property Value |
|---|---|
| DataField | PRICE |
| Name | txtPrice |
| Location | 3, 0 in |
| Size | 1, 0.2 in |
| Alignment | Right |
| OutputFormat | $#,##0.00 (or select Currency in the dialog) |
To add code to create a new instance of the Child Report (rptSub)
![]() |
Warning: Do not create a new instance of the subreport in the Format event. Doing so creates a new subreport each time the section Format code is run, which uses a lot of memory. |
To write the code in Visual Basic
The following example shows what the code for the method looks like.
| Visual Basic.NET code. Paste JUST ABOVE the ReportStart event. |
Copy Code
|
|---|---|
| Dim rpt As rptSub | |
| Visual Basic.NET code. Paste INSIDE the ReportStart event. |
Copy Code
|
|---|---|
| rpt = New rptSub | |
To write the code in C#
The following example shows what the code for the method looks like.
| C# code. Paste JUST ABOVE the ReportStart event. |
Copy Code
|
|---|---|
| private rptSub rpt; | |
| C# code. Paste INSIDE the ReportStart event. |
Copy Code
|
|---|---|
| rpt = new rptSub(); | |
To add code to pass a subset of the Parent Report's data to the Child Report
To add code to pass a subset of the parent report's data to the subreport
To write the code in Visual Basic
The following example shows what the code for the method looks like.
| Visual Basic.NET code. Paste INSIDE the Format event. |
Copy Code
|
|---|---|
Dim xmlDS As New GrapeCity.ActiveReports.Data.XMLDataSource
xmlDS.NodeList = CType(CType(Me.DataSource, GrapeCity.ActiveReports.Data.XMLDataSource).Field("ORDER/ITEM", True), System.Xml.XmlNodeList)
rpt.DataSource = xmlDS
SubReport1.Report = rpt
|
|
To write the code in C#
The following example shows what the code for the method looks like.
| C# code. Paste INSIDE the Format event. |
Copy Code
|
|---|---|
GrapeCity.ActiveReports.Data.XMLDataSource xmlDS = new GrapeCity.ActiveReports.Data.XMLDataSource();
xmlDS.NodeList = (System.Xml.XmlNodeList)((GrapeCity.ActiveReports.Data.XMLDataSource) this.DataSource).Field("ORDER/ITEM", true);
rpt.DataSource = xmlDS;
subReport1.Report = rpt;
|
|
To view the report
OR