2009-08-07 46 views
10

Tôi đang xem xét công cụ báo cáo XtraReports và có điều gì đó mà tôi chưa hiểu.Làm cách nào để đặt nguồn dữ liệu cho các trường trong XtraReport mà không có tập dữ liệu tại thời điểm thiết kế?

Làm cách nào để đặt nguồn dữ liệu cho một trường nhất định (được hiển thị trong báo cáo dưới dạng Nhãn mà tôi đoán) mà không phải tạo kết nối, bộ điều hợp và tập dữ liệu tại thời điểm thiết kế mà thực hiện theo chương trình.

Ví dụ: tôi có thể có bảng được gọi là "Người dùng" với 3 trường: UserId, Tên người dùng và Mật khẩu. Trong trình thiết kế báo cáo, tôi đặt 3 nhãn (và đây là câu hỏi của tôi) thiết lập nguồn dữ liệu để hiển thị 3 trường cơ sở dữ liệu. Sau đó, trong mã phía sau, tôi tạo một kết nối, thực hiện một lệnh, điền vào một tập dữ liệu, tạo một cá thể báo cáo, chuyển dữ liệu vào nó và hiển thị xem trước báo cáo.

Điều này có khả thi không? Hãy cho tôi biết nếu nó không đủ rõ ràng.

Cảm ơn!

Trả lời

12

Bạn có thể thiết lập thuộc tính DataSourceSchema của Báo cáo của bạn đến một lược đồ XML đại diện DataSource của bạn. Điều đó sẽ cho phép bạn sử dụng Trình thiết kế báo cáo để thiết lập các ràng buộc dữ liệu của bạn vào thời gian thiết kế mà không cần thiết lập kết nối tới cơ sở dữ liệu mỗi lần.

Đây là cách tôi làm điều đó: Khi tôi đã truy vấn báo cáo của tôi chủ yếu là hoàn thiện, tôi chạy mã một lần với một cuộc gọi đến

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

Sau đó, trong thiết kế báo cáo tôi thiết lập thuộc tính DataSourceSchema của Báo cáo cho mới đã tạo tệp. Điều này sẽ điền vào tab Danh sách trường của nhà thiết kế báo cáo để bạn có thể liên kết tại thời điểm thiết kế. Bằng cách đó bạn chỉ phải có một nguồn dữ liệu hợp lệ một lần (hoặc bất kỳ lúc nào bạn thay đổi các cột của bạn). Bạn chắc chắn vẫn có thể làm cách tiếp cận của Przemaas và làm tất cả các ràng buộc dữ liệu của bạn trong mã, nhưng tôi thích để cho các nhà thiết kế xử lý hầu hết công việc.

+0

Một cái gì đó như thế này là những gì tôi đang tìm kiếm, cảm ơn Kyle! Tôi nghĩ rằng tôi có thể xây dựng một ứng dụng rất nhỏ được một sql và viết một xml để làm điều này nhanh hơn một chút. – Sebastian

5

Có, điều đó là có thể. Bạn có thể xác định databindings cần thiết trong các mã:

this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa")); 
  • Văn bản dưới đây là tài sản trên lớp XrLabel . Tôi giả sử rằng bạn muốn trường ràng buộc hiển thị dưới dạng văn bản trong nhãn.
  • dữ liệu là đối tượng của bạn với dữ liệu
  • "Tên" là tên của lĩnh vực mà bạn muốn hiển thị
  • "aaa" là định dạng hiển thị, áp dụng trong trường hợp bạn muốn hiển thị giá trị với định dạng tùy chỉnh

Về cơ bản databindings trong XtraReport hành động khá nhiều theo cùng một cách như các cửa sổ tiêu chuẩn hình thức databindings.

Hãy cho tôi biết là bạn cần biết thêm hướng dẫn

+0

+1 Przemaas cho hiển thị cho tôi cách programatically để làm điều này, mặc dù Tôi có cảm giác rằng đây là một chút đối thoại, bạn có nghĩ vậy không? Bạn có thể chỉnh sửa trực tiếp nguồn dữ liệu của điều khiển nhãn. Cảm ơn! – Sebastian

5

Xây dựng một báo cáo mà không một tập dữ liệu, bạn sẽ sử dụng một đối tượng IList ... do đó làm theo hướng dẫn tốt đẹp này

Làm thế nào để: Bind một Báo cáo Web để array list https://documentation.devexpress.com/#XtraReports/CustomDocument3851

+0

Cảm ơn jalchr, đây là những gì tôi đang tìm kiếm. Tôi đã giải quyết vài tháng trước, nhưng cảm ơn! – Sebastian

2

Đây là một thay thế ..

rtpObject.DataSourceSchema = dataSet.GetXmlSchema(); 
1

trước khi thực hiện bất động sản đặt modifier này như nào

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

// hoặc //

XRBinding binding = new XRBinding("Text", dbaDataSet, "transactions.fk_transitems_transactionid.name2"); 
this.xrTableCell1.DataBindings.Add(binding); 
Các vấn đề liên quan