Динамическое связывание отчета с компонентом ReportViewer - PullRequest
1 голос
/ 29 марта 2012

Я хочу показать разные отчеты в компоненте ReportViewer, основанные на выделенном тексте в comboBox, но, похоже, у меня возникают трудности с привязкой источников данных к отчетам.
Это код в comboBox.TextChanged(object sender, EventArgs e) обработчик

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

Я получаю сообщение об ошибке: «Не предоставлен экземпляр источника данных для источника данных DataSet1».
Что еще мне нужно сделать, чтобы я мог динамически загружать отчет?

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Когда вы изменяете исходный отчет 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 голос
/ 09 октября 2015

вы пропустили 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();
0 голосов
/ 29 марта 2012

Экземпляр источника данных не был предоставлен для источника данных DataSet1

Пожалуйста, убедитесь, что имя первого параметра - "DataSet1".Это будет тот, который вы создали новый источник данных в .rdlc Design Form и назвали « DataSet1 ».

this.reportViewr.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", 
                                           yourDataSet.Tables[0]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...