2015-10-28 8 views
5

Ich habe einen ReportViewer und mehrere Berichte (ex Report1.rdlc, Report2.rdlc, ecc), Wie kann ich zwischen ihnen programmgesteuert wechseln?Programmatisch Bericht meinem ReportViewer zuweisen

Ich konnte die verschiedenen Berichte zuweisen, aber wenn ich das Programm ausführe sagt es, dass ich Datenursprünge zuweisen muss, wie kann ich erreichen, das zu tun?

EDIT: Hier ist mein Code so weit:

public Report() 
{ 
    InitializeComponent(); 

    this.View_StatoMagTableAdapter.Fill(this.NGStoreV2DataSet.View_StatoMag); 
    this.mag2TableAdapter.Fill(this.NGStoreV2DataSet.mag2); 

    this.mag2BindingSource.DataMember = "mag2"; 
    this.mag2BindingSource.DataSource = this.NGStoreV2DataSet; 
} 

private void reportViewer1_Load(object sender, EventArgs e) 
{ 
    this.reportViewer1.Reset(); 

    var binding = new BindingSource(); 
    binding.DataSource = this.NGStoreV2DataSet.mag2; 

    ReportDataSource rds = new ReportDataSource("NGStoreV2DataSet", binding); 
    this.reportViewer1.LocalReport.DataSources.Clear(); 
    this.reportViewer1.LocalReport.DataSources.Add(rds); 
    this.reportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report2.rdlc"; 
    this.reportViewer1.RefreshReport(); 
} 

Die neue Version immer noch nicht funktioniert, wenn ich starten Sie das Programm noch für Datenherkünfte fragen.

Ich habe schon verschiedene Kombinationen ausprobiert, aber nichts davon funktioniert. Kombinationen mögen:

var binding = new BindingSource(); 
binding.DataSource = this.NGStoreV2DataSet.mag2; 

ReportDataSource rds = new ReportDataSource("NGStoreV2DataSet", binding); 

oder

ReportDataSource rds = new ReportDataSourc("NGStoreV2DataSet", this.mag2BindingSource); 

EDIT: ich es endlich geschafft, dieses Problem zu lösen !! Ich war mit dem falschen Datensatz (NGStoreV2DataSet anstelle des Berichtsdataset wich ist DataSet1) Dank sowohl Tezzo und Hadi für die große Hilfe;)

+0

Wie Sie es einrichten? Wo ist deine Implementierung? – felipekm

+0

Frage bearbeitet – Spartan

Antwort

5

Sie müssen sowohl ReportPath und DataSources einzustellen:

YourReportViewer.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report1.rdlc" 
YourReportViewer.LocalReport.DataSources.Clear() 
YourReportViewer.LocalReport.DataSources.Add(New ReportDataSource("YourTableName", yourDataTable)) 
+0

Dies kann auch helfen: http://stackoverflow.com/questions/22017968/how-to-bind-dynamical-datasource-to-reportviewer-on-windows-forms-c-sharp – felipekm

+0

danke, aber ich Miss von wo die Variable 'yourDataTable' kommt. – Spartan

+0

'yourDataTable' ist eine Datentabelle, die mit Daten gefüllt ist, die im Bericht angezeigt werden sollen. Siehe diesen Link auf MSDN: https://msdn.microsoft.com/en-us/library/ms171920.aspx – tezzo

2

Sie können die folgende

var binding = new BindingSource(); 
binding.DataSource = yourData; 
reportViewer1.Reset(); 
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NGStoreV2DataSet", 
        binding)); 
reportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report1.rdlc"; 
reportViewer1.RefreshReport(); 

Hoffnung machen, dass diese Sie

+0

es funktioniert nicht, es fragt immer noch nach Datenherkunft, ich habe meine Frage mit dem eigentlichen Code bearbeitet – Spartan

0

/*helfeneine Datentabelle Macht, die der Wert ist, ist Clearing Lokale wichtig und der Name, was auch immer Sie Ihre Daten-Set in Ihrem Bericht bessere Abstimmung rufen */

Datatable dGraph = clsDailyReports.MakeTmpDataSet.Invoke (con, SqlAtd) .Tables [0];

rpt.LocalReport.DataSources.Clear(); 

    Microsoft.Reporting.WebForms.ReportDataSource rptdBody = new Microsoft.Reporting.WebForms.ReportDataSource(); 
    rptdBody.Name = "DataSet1"; 
    rptdBody.Value = dBody; 
    rpt.LocalReport.DataSources.Add(rptdBody); 

    Microsoft.Reporting.WebForms.ReportDataSource rptdTop = new Microsoft.Reporting.WebForms.ReportDataSource(); 
    rptdTop.Name = "DataSet2"; 
    rptdTop.Value = dGraph; 
    rpt.LocalReport.DataSources.Add(rptdTop); 

    DataTable dDate = clsDailyReports.MakeTmpDataSet.Invoke(con, sSqlDate).Tables[0]; 
    Microsoft.Reporting.WebForms.ReportDataSource rptDate = new Microsoft.Reporting.WebForms.ReportDataSource(); 
    rptDate.Name = "DataSet3"; 
    rptDate.Value = dDate; 
    rpt.LocalReport.DataSources.Add(rptDate); 

    rpt.LocalReport.ReportPath = System.Web.HttpContext.Current.Server.MapPath(@"~\Reports\rptUnAdjustedPeriodTotals.rdlc"); 
    rpt.LocalReport.Refresh(); 
Verwandte Themen