2016-12-08 2 views
0

Ich habe einen Report Viewer auf meinem frmReports. Ich habe 2 Berichte erstellt, Report1.rdlc und Report2.rdlc. Ich habe ein stark definiertes DataSet - mit zwei DataTables (1, 2) für jeden Bericht. Ich versuche, den gleichen reportViewer bei der Anzeige beider Berichte verwenden zu können.Reporting Services in vb.net - Bericht-Viewer

Zur Zeit habe ich zwei Tasten (1 für jeden Bericht), so dass auf den Knopf klicken - ich Abfrage gegen SQL Server-Daten zu erhalten und es in jede Datentabelle wie folgt zu laden ..

adapter = New SqlDataAdapter(sql, Con) 
    adapter.Fill(ds) 

    ds.Tables(0).TableName = "DataTable1" 
    ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc" 
    DataTable1BindingSource.DataSource = ds 
    ReportViewer1.RefreshReport() 

ich das gleiche tun Sache für Report2, aber mit DataTable2 und ich ändern EmbededResource in Report2 und DataTable Bindung an DataTable2.

Die Sache ist, einer der Berichte muss im SELECT REPO ausgewählt werden, bevor ich meine Anwendung ausführen - also wenn Report1.rdlc vorgewählt ist - dann, wenn ich es debugge und Report1 ausführe, läuft es völlig in Ordnung. Allerdings, wenn ich in diesem Fall Report2 nicht ausführen darf.

Ich habe versucht, diese beiden Funktionen auf Form_Load mit (in diesem Fall wird der Report Viewer leer ist und nur, wenn der Benutzer klickt auf einem der Tasten bestückt werden soll.

ReportViewer1.Reset() 
ReportViewer1.LocalReport.DataSources.Clear() 

aber es sagt mir, dass

Datenquelle Instanz wird nicht DataSet1 für die Datenquelle versorgt.

Antwort

0

Da dies ein Problem zu sein scheint, dass nicht viele Leute wissen, Die Lösung für ... nun, hier ist es. Zumindest, wie ich es für irgendjemand anderen gemacht habe, der das gleiche Problem haben könnte.

Ich habe ein stark definiertes DataSet1 erstellt - darin habe ich DataTable1 mit genauen Feldern, die ich in meiner Abfrage auswähle. Ich habe auch DataTable2 für Report2. Daher ist dieser Code zum größten Teil identisch - für beide Berichte ändere ich nur die Referenzen auf Report2 und DataTable2.

Me.ReportViewer1.Reset() 

ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc" 
sql = "SELECT RecBy, RecOn from tblNotes" 

adapter = New SqlDataAdapter(sql, Conn) 
adapter.Fill(ds, "DataTable1") 

Dim rds As ReportDataSource = New ReportDataSource("DataSet1", ds.Tables("DataTable1")) 
ReportViewer1.LocalReport.DataSources.Clear() 
ReportViewer1.LocalReport.DataSources.Add(rds) 
ReportViewer1.RefreshReport() 

müssen diese an der Spitze ....

Imports System.Data 
Imports System.Data.SqlClient 
Imports Microsoft.Reporting.WinForms