Wie setze ich DataSource für Felder in xtrArports ohne Datensatz zur Entwurfszeit ein?
-
12-09-2019 - |
Frage
Ich schaue jetzt einen Blick auf das Xtrareports -Berichtstool und es gibt etwas, das ich noch nicht verstehe.
Wie setze ich die Datenquelle für ein bestimmtes Feld (ich denke, im Bericht als Etikett angezeigt), ohne eine Verbindung, einen Adapter und einen Datensatz zur Entwurfszeit aufzubauen, aber programmatisch.
Zum Beispiel kann ich eine Tabelle namens "Benutzer" mit 3 Feldern haben: BenutzerID, Benutzername und Passwort. In dem Berichtsdesigner platziere ich 3 Labels (und hier ist meine Frage) die Datenquelle für die Anzeige der 3 Datenbankfelder. In dem Code dahinter erstelle ich dann eine Verbindung, führe einen Befehl aus, fülle einen Datensatz aus, erstelle eine Berichtsinstanz, übertrage das DataTable an ihn und zeige die Berichtsvorschau an.
Ist das möglich? Lassen Sie mich wissen, ob es nicht klar genug ist.
Vielen Dank!
Lösung
Sie können die DataSourceSchema -Eigenschaft Ihres Berichts auf ein XML -Schema festlegen, das Ihre Datenquelle darstellt. Mit diesem können Sie mit dem Berichtsdesigner Ihre Datenbindungen zur Entwurfszeit festlegen, ohne jedes Mal eine Verbindung zur Datenbank herzustellen.
So mache ich es: Sobald ich meine Berichtsanfrage größtenteils abgeschlossen habe, führe ich den Code einmal mit einem Anruf an
myDataSet.WriteXml("C:\myDataSourceSchema.xml", System.Data.XmlWriteMode.WriteSchema)
Im Berichtsdesigner habe ich dann die DataSourceSchema -Eigenschaft des Berichts auf die neu erstellte Datei festgelegt. Dadurch wird die Registerkarte "Feldliste des Berichtsdesigners" fopuliert, sodass Sie zur Entwurfszeit binden können. Auf diese Weise müssen Sie nur einmal eine gültige Datenquelle haben (oder zu jedem Zeitpunkt, an dem Sie Ihre Spalten ändern). Sie können den Ansatz von Przemaas definitiv immer noch durchführen und alle Ihre Datenbindungen in Code durchführen, aber ich bevorzuge den Designer die meisten Arbeiten.
Andere Tipps
Erstellen eines Berichts ohne Datensatz, Sie würden ein ilistisches Objekt verwenden ... Folgen Sie also diesem schönen Tutorial
Wie zu: Binden Sie einen Webbericht an eine Array -Liste https://documentation.devexpress.com/#xtrareports/customdocument3851
Ja, es ist möglich. Sie können die erforderlichen Datenbanken im Code definieren:
this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa"));
- Der Text hier ist Eigenschaft in der XRLabel -Klasse. Ich gehe davon aus, dass Sie das Feld des gebundenen Feldes als Text im Etikett anzeigen möchten.
- Daten sind Ihr Objekt mit Daten
- "Name" ist Name des Feldes, das Sie anzeigen möchten
- "AAA" ist Anzeigeformat, falls Sie Werte mit benutzerdefinierter Formatierung anzeigen möchten
Grundsätzlich handeln Datenbindungen in Xtrareport genauso genauso wie Standard -Windows -Formulare -Datenbindungen.
Lassen Sie mich wissen, dass Sie weitere Richtlinien benötigen
Hier ist eine Alternative ..
rtpObject.DataSourceSchema = dataSet.GetXmlSchema();
Bevor Sie diese Modifikator -Eigenschaft als öffentlich einstellen
InvoicePrinting_Rpt InvoicePrintingRpt = new InvoicePrinting_Rpt();//report object
InvoicePrintingRpt.BillDetails.Report.DataSource = ds_Invoice;
InvoicePrintingRpt.Report.DataMember = ds_Invoice.Tables[0].TableName;
//bellow third parameter as your column name.
InvoicePrintingRpt.lbl_BillHead.DataBindings.Add("Text", null, "BILL_DESCRIPTION");
InvoicePrintingRpt.lbl_Det_Date.DataBindings.Add("Text", null, "TRANSACTION_DATE");
InvoicePrintingRpt.lbl_ISINCode.DataBindings.Add("Text", null, "ISIN_CODE");
ReportViewer1.Report = InvoicePrintingRpt;//assign report obj
ReportViewer1.Report.Name = "DevExpress_Reports.InvoicePrinting_Rpt";
ReportViewer1.DataBind(); //binding
XRBinding binding = new XRBinding("Text", ageingBindingSource, "ageing_contactsLookup.name");
this.xrLabel19.DataBindings.Add(binding);
// oder //
XRBinding binding = new XRBinding("Text", dbaDataSet, "transactions.fk_transitems_transactionid.name2");
this.xrTableCell1.DataBindings.Add(binding);