2012-03-29 18 views
1

Ich möchte verschiedene Berichte in der ReportViewer-Komponente basierend auf ausgewähltem Text in ComboBox anzeigen, aber es scheint, dass ich Schwierigkeiten habe, Datenquellen an Berichte zu binden.
Dies ist der Code in comboBox.TextChanged(object sender, EventArgs e) HandlerBericht dynamisch an die ReportViewer-Komponente senden

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

Ich erhalte eine Fehlermeldung: „Eine Datenquelle Instanz für die Datenquelle geliefert DataSet1 nicht“.
Was brauche ich noch, um den Bericht dynamisch zu laden?

Antwort

0

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

Bitte stellen Sie sicher, dass der erste Parametername "DataSet1" lautet. Welches wäre das, das Sie eine neue DataSource in .rdlc Design Form erstellt und als "DataSet1" benannt haben.

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

Außerdem müssen Sie die Daten angeben, die dem Bericht zur Verfügung gestellt werden (basierend auf dem Berichtsnamen usw.), um sicherzustellen, dass er korrekt gebunden ist. Die erwartete Datenstruktur jedes Berichts wird höchstwahrscheinlich unterschiedlich sein. – GalacticCowboy

+0

das funktioniert überhaupt nicht für mich. Es gibt einen großen Fehler, den ich mache, und ich denke, dass es etwas mit dem Erstellen neuer Berichte zu tun hat. Wenn ich einen neuen Bericht erstelle, verwende ich "DataSet1" 'als DataSource. Ich weiß nicht, wo ich mehr suchen soll, um das zu lösen ... –

1

Wenn Sie den Quellbericht des BerichtsViewer ändern, müssen Sie auch die Datenquellen dafür festlegen. Normalerweise behandelt der Designer dies für Sie (werfen Sie einen Blick auf den vom Designer generierten Code, um zu sehen, wie er behandelt wird). Wenn Sie jedoch den Quellbericht ändern, wird das LocalReport-Objekt des Steuerelements zurückgesetzt.

Daher müssen Sie alle Datenquellen zu Ihrem Bericht liefern, so dass es korrekt angezeigt:

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

Sie haben die gleiche Zeile für jede Datenquelle in Ihrem Bericht definiert hinzuzufügen. Wenn Sie nicht sicher sind, welche Datenquellennamen Sie verwenden müssen, sehen Sie sich den vom Designer generierten Code an, um zu sehen, was diese sind. Sie können auch den folgenden Code verwenden, die alle Namen Datenquellen Bericht, um herauszufinden:

this.reportViewer.LocalReport.GetDataSourceNames() 

Wenn der Bericht Variablen hat, müssen Sie sie definieren, sonst werden Sie den gleichen Fehler.

Hoffnung, die

+0

das funktioniert überhaupt nicht für mich. Es gibt einen großen Fehler, den ich mache, und ich denke, dass es etwas mit dem Erstellen neuer Berichte zu tun hat. Wenn ich einen neuen Bericht erstelle, verwende ich "DataSet1" 'als DataSource. Ich weiß nicht, wo ich mehr suchen soll, um das zu lösen ... –

+0

Ohne weitere Details zu deinem Code ist es schwer zu sagen, was das Problem wirklich ist. –

1

hilft Ihnen, die ReportPath außen vor.

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