Wie setze ich DataSource für Felder in xtrArports ohne Datensatz zur Entwurfszeit ein?

StackOverflow https://stackoverflow.com/questions/1242825

  •  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!

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top