I'm almost there. Subreport is displaying but theres no data in it. What am I doing wrong please?
Winforms. ObjectDatasource using a dataset with 2 tables, master and detail.
My report represents a paper questionnaire/Form. Master is a single row table with a person's personal details eg name, address etc. The details table is multi row and represents the questions and answers that the person filled out. The tables are linked by an ID field. Ive added the ID to the filter field. For testing purposed I've created a dummy main and multi detail records.
Main report designer file entries
//
// HealthQuestionnaireDataSet
//
this.HealthQuestionnaireDataSet.DataMember = "MainDetail";
this.HealthQuestionnaireDataSet.DataSource = typeof(pulse.move.datasources.datasetHealthQuestionaire);
this.HealthQuestionnaireDataSet.Name = "HealthQuestionnaireDataSet";
//
// subReport1
//
this.subReport1.Name = "subReport1";
typeReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("parmId", "= Fields.Id"));
typeReportSource1.TypeName = "pulse.move.telerik.reportlib.RptHealthQuestionnaireSubDetail, pulse.move.telerik.reportlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
this.subReport1.ReportSource = typeReportSource1;
I call the following static method in the code behind of my main report to generate the report onto the ReportViewer using the dataset passed in. This seems to work correctly. If I change the code to read "var report = new RptHealthQuestionnaireMainDetail { DataSource = dataset };" then it fails to generate. I wondered if this was the cause of my problem with the sub report not working.
public static void GenerateReport(datasetHealthQuestionaire dataset, ReportViewer viewer)
{
viewer.CancelRendering();
var report = new RptHealthQuestionnaireMainDetail { DataSource = dataset.maindetail };
var reportSource = new InstanceReportSource {ReportDocument = report};
viewer.ReportSource = reportSource;
viewer.RefreshReport();
}
I wasn't able to get the subreport to work in the designer, so I moved the binding code to the constructor of the sub report to make it easier to debug and change.
The subreport displays the labels correctly, but there's no data. What am I missing to bind the data correctly?
public RptHealthQuestionnaireSubDetail()
{
//
// Required for telerik Reporting designer support
//
InitializeComponent();
Bindings.Clear();
// tried both of the following. Makes no difference. Still no data
//Bindings.Add(new Telerik.Reporting.Binding("DataSource", "=ReportItem.DataObject"));
Bindings.Add(new Telerik.Reporting.Binding("DataSource", "=ReportItem.Parent.Parent.DataObject"));
}
//
// RptHealthQuestionnaireSubDetail
//
// Commented out the following 2 lines and moved them to the constructor
//this.Bindings.Add(new Telerik.Reporting.Binding("DataSource", "=ReportItem.DataObject"));
//this.DataSource = this.HealthQuestionnaireDataSource;
this.Filters.Add(new Telerik.Reporting.Filter("= Fields.Id", Telerik.Reporting.FilterOperator.Equal, "= Parameters.parmId.Value"));
this.Items.AddRange(new Telerik.Reporting.ReportItemBase[] {
this.detailSection1});
this.Name = "RptHealthQuestionnaireSubDetail";
reportParameter1.Name = "parmId";
reportParameter1.Type = Telerik.Reporting.ReportParameterType.Integer;
this.ReportParameters.Add(reportParameter1);