I am using this code to load a main report and a subreport inside the main report. The main report is a blank one and just contains subreport.
Here is my code:
Simply do this:
...
DataSet ds = new DataSet();
dscmd.Fill(ds, "DataTable1");
...
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load("C:/MainReport.rpt");
cryRpt.SetDataSource(ds);
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();
Note I'm creating a new DataSet and not a type derived from the DataSet.
In the report/subreport database fields menu, the table must have the same name as the DataTable:
And the Datasource location for reports and subreports must be the same:
This will bind the source tables by name with the .rpt file. Doing in this way you no longer need to set the data for each subreport by code.