Wie binden dynamisch datasource zu reportviewer windows forms c#
Ich erstellt habe, windows form, fungiert als Bericht loader. Ich haben auch zwei RDLC-reports, die vom Berichts-Assistenten automatisch erstellte dataset für diese beiden Berichte. Jetzt habe ich zwei Datensätze: sparcsn4DataSet.xsd-und sparcsn4DataSet1.xsd, die mit der gespeicherten Prozedur auf und übergibt zwei Parameter (dateFrom/dateTo). Ich habe ein problem mit verbindlichen Datensatz je nach status:
if (idRep.Equals("extraMove"))
Es ist ganz einfach zu binden dataset reportview, wenn Sie einen Bericht.
aber was, wenn Sie mehr als eine haben? Ich kann immer ein anderes Formular erstellen mit einem anderen reportviewer-aber dies ist nicht eine option (was ist wenn man 10 Berichte/datasets), das ist definitiv in Frage?
Es sollte eine Möglichkeit zum binden von datasets an reportviewer... Hat jemand eine Idee, wie ich das lösen kann verbindlich problem, je nach status?
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, die haben reportviewer auf Sie:
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();
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, zu versuchen, es herauszufinden, habe ich gestern eine Lösung gefunden, die akzeptabel war für mich, also wollte ich mit anderen teilen:
1.st müssen Sie erstellen eine Klasse-Modell mit Eigenschaften, so dass es Hinzugefügt wird in dataset:
Beispiel:
nach, dass Sie brauchen, um zu erstellen, die ganz einfach die Klasse für die Verbindung zu der Datenbank und Aufruf der gespeicherten Prozedur, die übergabe der Parameter und Lesen Sie mithilfe von data-reader-Ausgabe. In meinem Beispiel habe ich dieses in einer Liste aufzählen, mein Modell:
Beispiel:
schließlich können Sie es hinzufügen, um die reportViewer1
Ich hoffe das hilft anderen die Dinge zu beschleunigen.
prost!
Verbrachte ich einige Zeit auf das gleiche problem. Ich bin mit VS 2013, wo das dataset verbunden ist, durch eine automatisch erstellte BindingSource in das Formular melden. Wenn Sie den Bericht erstellen, und fügen Sie alle erforderlichen Elemente, alles funktioniert einwandfrei. Wenn Sie (sagen) eine Tabelle hinzufügen später, die BindingSources get-out-of-Schritt, oder werden nicht erstellt.
Bearbeiten der Bericht-Formular Entwurfsansicht, klicken Sie auf das ReportViewer-Objekt und verwenden Sie das kleine "Aufgaben" arrowhead in den top-r.h. Ecke. Wählen Sie entweder 'Rebind-Datenquellen "oder" Wählen Sie "Daten-Quellen" zu prüfen sind Sie richtig gebunden.
Zwingen Visual Studio zu erstellen, die automatisch die bindingsource, die Sie haben, um den Bericht zu erstellen (.rdlc) zuerst. Mit einer datasource verbunden, wenn Sie die Komponente hinzufügen (reportviewer) und verknüpfen Sie die Komponente mit dem Namen des Berichts, wie gezeigt, in Ihrem Bild, wenn Sie den Bericht, es wird automatisch eine verbindliche Quelle mit dem Namen, den Sie verwenden, wenn Sie das design erstellt.