动态绑定报告到ReportViewer组件

时间:2012-03-29 16:18:04

标签: c# visual-studio-2010 report

我想根据comboBox中的选定文本在ReportViewer组件中显示不同的报告,但似乎我在将数据源绑定到报告时遇到困难。
这是comboBox.TextChanged(object sender, EventArgs e)处理程序

中的代码
reportViewer.Reset();
this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc";
this.reportViewer.RefreshReport();

我收到错误:“没有为数据源DataSet1提供数据源实例”。
我还需要做什么才能动态加载报告?

3 个答案:

答案 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]));