2009-08-07 14 views
10

Zajmuję się teraz narzędziem do raportowania XtraReports i jest coś, czego jeszcze nie dostaję.Jak ustawić źródło danych dla pól w XtraReports bez konieczności posiadania zestawu danych w czasie projektowania?

Jak ustawić źródło danych dla określonego pola (pokazanego w raporcie jako etykieta, którą chyba), bez konieczności budowania połączenia, adaptera i zestawu danych w czasie projektowania, ale robiąc to programowo.

Na przykład mogę mieć tabelę o nazwie "Użytkownik" z 3 polami: UserId, Username i Password. W projektancie raportów umieszczam 3 etykiety (i tu jest moje pytanie) ustaw źródło danych dla pokazania 3 pól bazy danych. Następnie w kodzie źródłowym tworzę połączenie, wykonuję polecenie, wypełniam zestaw danych, tworzę instancję raportu, przekazuję do niego datatable i pokazuję podgląd raportu.

Czy to możliwe? Daj mi znać, jeśli nie jest to wystarczająco jasne.

Dzięki!

Odpowiedz

12

Można ustawić swój raport za własność DataSourceSchema do schematu XML, który reprezentuje swój DataSource. Umożliwi to korzystanie z Projektanta raportów w celu ustawienia powiązań danych w czasie projektowania bez ustanawiania połączenia z bazą danych za każdym razem.

Oto jak to zrobić: Raz Mam zapytanie raport głównie sfinalizowana, uruchomić kod raz z wezwaniem do

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

następnie w projektant raportu I ustawić właściwość DataSourceSchema raportu do nowo utworzony plik. Spowoduje to wypełnienie karty Lista pól projektanta raportów, dzięki czemu można powiązać w czasie projektowania. W ten sposób musisz mieć tylko jedno ważne źródło danych (lub dowolną zmianę kolumn). Z pewnością możesz nadal robić podejście Przemyasa i wykonywać wszystkie powiązania danych w kodzie, ale wolę, aby projektant obsługiwał większość pracy.

+0

Coś takiego właśnie szukałem, dzięki Kyle! Myślę, że mogę zbudować bardzo małą aplikację, która pobiera sql i zapisuje xml, aby zrobić to trochę szybciej. – Sebastian

5

Tak, jest to możliwe. Można zdefiniować niezbędne DataBindings w kodzie:

this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa")); 
  • Tekst tutaj jest nieruchomość od klasy XrLabel . Zakładam, że chcesz wyświetlić powiązane pole jako tekst w etykiecie.
  • danych jest Twój obiekt z danymi
  • „Nazwa” to nazwa pola, które chcesz wyświetlić
  • „aaa” to format obrazu, stosowane w przypadku, gdy chcesz wyświetlić wartości z niestandardowego formatowania

Zasadniczo databindings w XtraReport zachowują się w podobny sposób, jak w standardowych oknach.

Daj mi znać, to trzeba więcej wskazówek

+0

+1 Przemaas za pokazanie mi programowo sposób to zrobić, choć Mam wrażenie, że jest to trochę konwersacyjne, nie sądzisz? Powinieneś być w stanie bezpośrednio edytować źródło danych kontrolki etykiety. Dzięki! – Sebastian

2

Oto alternatywny ..

rtpObject.DataSourceSchema = dataSet.GetXmlSchema(); 
1

przed wykonaniem tej właściwości zestaw modyfikujący jako publiczną

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

// lub //

XRBinding binding = new XRBinding("Text", dbaDataSet, "transactions.fk_transitems_transactionid.name2"); 
this.xrTableCell1.DataBindings.Add(binding); 
Powiązane problemy