2012-03-29 2 views
1

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

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

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

ответ

0

A data source instance has not been supplied for the datasource DataSet1

Пожалуйста, убедитесь, что имя первого параметра «DataSet1». Каким будет создан новый DataSource в форме проектирования .rdlc и назван как «DataSet1».

this.reportViewr.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", 
              yourDataSet.Tables[0])); 
+0

Кроме того, вам необходимо будет идентифицировать данные, которые должны быть предоставлены в отчете (на основе имени отчета и т. Д.), Чтобы убедиться, что он связан правильно. Структура ожидаемых данных каждого отчета, скорее всего, будет отличаться. – GalacticCowboy

+0

это не работает для меня вообще. Есть огромная ошибка, которую я делаю, и я думаю, что она имеет какое-то отношение к процессу создания новых отчетов. Всякий раз, когда я создаю новый отчет, я использую '' DataSet1 '' как DataSource. Я не знаю, где искать больше, чтобы решить эту проблему ... –

1

Когда вы меняете исходный отчет reportViewer, вам также необходимо установить для него источники данных. Как правило, конструктор обрабатывает это для вас (посмотрите на код, сгенерированный конструктором, чтобы увидеть, как он его обрабатывает), но изменение исходного отчета сбрасывает объект LocalReport элемента управления.

Поэтому вам нужно предоставить все источники данные в отчет, так что он может отображать правильно:

this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc"; 
this.reportViewer.LocalReport.Datasource.Add("Datasource1", whateverIsYourDatasourceObject) 
this.reportViewer.RefreshReport(); 

Вы должны добавить ту же строку для каждого источника данных, определенных в отчете. Если вы не уверены в именах источников данных, которые вам нужно использовать, посмотрите на код, созданный разработчиком, чтобы узнать, что они собой представляют. Вы также можете использовать следующий код, чтобы узнать имена всех DataSources в докладе:

this.reportViewer.LocalReport.GetDataSourceNames() 

Если отчет содержит переменные, необходимо определить их тоже, в противном случае вы получите ту же ошибку.

Надежда, что помогает

+0

это не работает для меня вообще. Есть огромная ошибка, которую я делаю, и я думаю, что она имеет какое-то отношение к процессу создания новых отчетов. Всякий раз, когда я создаю новый отчет, я использую '' DataSet1 '' как DataSource. Я не знаю, где искать больше, чтобы решить эту проблему ... –

+0

Без дополнительной информации о вашем коде, трудно сказать, в чем проблема. –

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();