我想根据comboBox中的选定文本在ReportViewer组件中显示不同的报告,但似乎我在将数据源绑定到报告时遇到困难。
这是comboBox.TextChanged(object sender, EventArgs e)
处理程序
reportViewer.Reset();
this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc";
this.reportViewer.RefreshReport();
我收到错误:“没有为数据源DataSet1提供数据源实例”。
我还需要做什么才能动态加载报告?
答案 0 :(得分:1)
更改reportViewer的源报告时,您还必须为其设置数据源。通常,设计人员会为您处理(请查看设计器生成的代码以了解它如何处理它),但更改源报告会重置控件的LocalReport对象。
因此,您需要将所有数据源提供给报告,以便正确显示:
this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc";
this.reportViewer.LocalReport.Datasource.Add("Datasource1", whateverIsYourDatasourceObject)
this.reportViewer.RefreshReport();
您必须为报告中定义的每个数据源添加相同的行。如果您不确定需要使用的数据源名称,请查看设计器生成的代码以查看它们是什么。您还可以使用以下代码查找报告的所有数据源名称:
this.reportViewer.LocalReport.GetDataSourceNames()
如果你的报告有变量,你也需要定义它们,否则你会得到同样的错误。
希望有所帮助
答案 1 :(得分:1)
您遗漏了 ReportPath 。
this.reportViewer.LocalReport.ReportPath = "Reports\\" + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc";
this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc";
this.reportViewer.LocalReport.Datasource.Add("Datasource1", whateverIsYourDatasourceObject)
this.reportViewer.RefreshReport();
答案 2 :(得分:0)
尚未为数据源提供数据源实例 数据集1
请确保第一个参数名称为“DataSet1”。您将在.rdlc设计表单中创建一个新的DataSource,并将其命名为“ DataSet1 ”。
this.reportViewr.LocalReport.DataSources.Add(new ReportDataSource("DataSet1",
yourDataSet.Tables[0]));