Dynamische Bindung der Datenquelle an den Reportviewer in Windows Forms C #

Ich habe ein Windows-Formular erstellt, das als Report Loader fungiert. Ich habe auch zwei RDLC-Berichte vom Berichtsassistenten erstellt und automatisch einen Datensatz für diese beiden Berichte erstellt. Jetzt habe ich zwei Datensätze: sparcsn4DataSet.xsd und sparcsn4DataSet1.xsd, die eine gespeicherte Prozedur verwenden und zwei Parameter übergeben (dateFrom / dateTo). Ich habe je nach Status ein Problem mit der Datenbindung:

if (idRep.Equals("extraMove"))

Wenn Sie einen Bericht haben, können Sie den Datensatz ganz einfach an die Berichtsansicht binden.

 aber was ist, wenn Sie mehr als eine haben? Ich kann immer ein anderes Formular mit einem anderen Reportviewer erstellen, aber dies ist keine Option (was ist, wenn Sie 10 Berichte / Datensätze haben), das ist definitiv nicht in Frage?

Es sollte eine Möglichkeit geben, den Datensatz an den Reportviewer zu binden ... Hat jemand eine Idee, wie ich das Bindungsproblem je nach Status lösen kann?

if (idRep.Equals("extraMove"))
        {
            this.AGCT_ServiceEventReportTableAdapter.Fill(this.sparcsn4DataSet.AGCT_ServiceEventReport, d1,d2);
        }
        else if (idRep.Equals("stripStuff"))
        {
            this.AGCT_StripStuffReportTableAdapter.Fill(this.sparcsn4DataSet1.AGCT_StripStuffReport, d1, d2);
        }
        else
        {
            MessageBox.Show("Ooops, something went wrong...!");
        }

Dies ist ReportForm.cs, auf dem ReportViewer installiert ist:

namespace NavisReportLoader
{
    public partial class ReportForm : Form
    {
    public DateTime d1;
    public DateTime d2;
    public string dat1;
    public string dat2;
    public string idRep;
    public ReportForm()
    {
        InitializeComponent();
    }
    public void passParam(string dateFrom, string dateTo, string date1, string date2)
    {
        //ispravi ovo
       d1 = Convert.ToDateTime(dateFrom);
       d2 = Convert.ToDateTime(dateTo);
       dat1 = date1;
       dat2 = date2;
    }
    public void report(string id)
    {
        idRep = id;
    }
    private void ReportForm_Load(object sender, EventArgs e)
    {

        ReportParameter[] param = new ReportParameter[2];
        param[0] = new ReportParameter("date1", dat1);
        param[1] = new ReportParameter("date2", dat2);
        this.reportViewer1.LocalReport.SetParameters(param);

        if (idRep.Equals("extraMove"))
        {
            this.AGCT_ServiceEventReportTableAdapter.Fill(this.sparcsn4DataSet.AGCT_ServiceEventReport, d1,d2);
        }
        else if (idRep.Equals("stripStuff"))
        {
            this.AGCT_StripStuffReportTableAdapter.Fill(this.sparcsn4DataSet1.AGCT_StripStuffReport, d1, d2);
        }
        else
        {
            MessageBox.Show("Ooops, something went wrong...!");
        }

        this.reportViewer1.RefreshReport();
    }
    }
   }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage