2009-08-07 7 views
10

Ich schaue jetzt auf XtraReports Reporting-Tool und es gibt etwas, das ich es noch nicht bekommen.Wie wird die Datenquelle für Felder in XtraReports festgelegt, ohne dass zur Entwurfszeit ein Dataset vorhanden ist?

Wie stelle ich die Datenquelle für ein bestimmtes Feld ein (das im Bericht als Label angezeigt wird), ohne eine Verbindung, einen Adapter und ein Dataset zur Entwurfszeit erstellen zu müssen, sondern programmatisch.

Zum Beispiel kann ich eine Tabelle namens "Benutzer" mit 3 Feldern haben: UserId, Benutzername und Passwort. Im Bericht Designer lege ich 3 Etiketten (und hier ist meine Frage) die Datenquelle zum Anzeigen der 3 Datenbankfelder. Dann, in dem Code hinter, erstelle ich eine Verbindung, führe einen Befehl aus, fülle ein Dataset, erstelle eine Report-Instanz, übergebe die Datentabelle an ihn und zeige die Vorschau des Berichts.

Ist das möglich? Lass es mich wissen, wenn es nicht klar genug ist.

Danke!

Antwort

12

benötigen Sie könnten Bericht DataSourceSchema Eigenschaft auf einem XML-Schema festgelegt, dass Ihre Datasource darstellt. Dadurch können Sie den Berichts-Designer verwenden, um Ihre Datenbindungen zur Entwurfszeit festzulegen, ohne jedes Mal eine Verbindung zur Datenbank herzustellen.

Hier ist, wie ich es tun: Nachdem ich meinen Bericht Abfrage meist fertig gestellt haben, ich führen Sie den Code einmal mit einem Aufruf an

myDataSet.WriteXml("C:\myDataSourceSchema.xml", System.Data.XmlWriteMode.WriteSchema) 

dann in dem Berichtsdesigner ich den Bericht des DataSourceSchema Eigenschaft auf den neu eingestellten erstellte Datei. Dadurch wird die Registerkarte Feldliste des Berichts-Designers gefüllt, sodass Sie zur Entwurfszeit binden können. Auf diese Weise müssen Sie nur einmal eine gültige Datenquelle haben (oder jedes Mal, wenn Sie Ihre Spalten ändern). Sie können den Ansatz von Przemaas auf jeden Fall machen und alle Ihre Datenbindungen in Code umsetzen, aber ich bevorzuge es, den Designer die meiste Arbeit erledigen zu lassen.

+0

So etwas habe ich gesucht, danke Kyle! Ich denke, ich kann eine sehr kleine App bauen, die einen SQL bekommt und einen XML schreibt, um das ein bisschen schneller zu machen. – Sebastian

5

Ja, es ist möglich. Sie können notwendigen Databindings im Code definieren:

this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa")); 
  • Text hier Eigenschaft auf der XrLabel Klasse. Ich nehme an, dass Sie gebundenes Feld als Text in Label anzeigen möchten.
  • Daten ist Ihr Objekt mit Daten
  • „Name“ ist der Name des Feldes, das Sie
  • „aaa“ ist das Anzeigeformat, anwendbar, falls Sie mit benutzerdefinierten Formatierung
  • Werte angezeigt werden soll angezeigt werden soll

Grundsätzlich verhalten sich Datenbindungen in XtraReport genauso wie Standard-Windows-Datenbindungen.

Lassen Sie mich wissen, ist, dass Sie mehr Richtlinien

+0

+1 Przemaas für das Zeigen Sie mir die programmatische Art und Weise, dies zu tun, obwohl Ich habe das Gefühl, dass dies ein bisschen conversome ist, meinst du nicht? Sie sollten in der Lage sein, die Datenquelle eines Label-Steuerelements direkt zu bearbeiten. Vielen Dank! – Sebastian

2

Hier Binden eines Web Report ist ein alternativer ..

rtpObject.DataSourceSchema = dataSet.GetXmlSchema(); 
1

vor diesen Satz Modifikator Eigenschaft als öffentliche

tun
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 
1
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);