2012-01-17 39 views
5

Tôi biết chúng ta có thể liên kết nguồn dữ liệu đối tượng với RDLC. Tôi cố gắng để ràng buộc một đối tượng như như sau:Nguồn dữ liệu đối tượng ràng buộc với các đối tượng danh sách lồng nhau trong RDLC

public class ContactReportData 
{ 
    public string ContactReportHeading{get;set;} 
    public string ContactReportSubHeading{get;set;} 
    public List<Contact> ContactDetails{get;set;} 
} 

public class Contact { 
    public string ContactName{get;set;} 
    public string ContactDesignation{get;set;} 
} 

Trong khi Thiết lập để RDLC, nó sẽ tìm thấy chỉ có một bộ dữ liệu vào thời điểm, nói ContactReportData (không có trong danh sách liên lạc) hoặc liên hệ. Tôi đoán đó là vì báo cáo cần nó theo cách đó.

Những gì tôi muốn là phải có các dữ liệu trình bày trong báo cáo như: ContactReportHeading ContactReportSubHeading dạng bảng của Danh bạ trong - Tên người liên hệ, Chỉ.

Tôi có thể cung cấp thông tin chi tiết về dữ liệu báo cáo là tĩnh và chỉ ràng buộc danh sách liên hệ, nhưng những gì tôi có là danh sách các báo cáo liên hệ nơi tôi gặp phải vấn đề.

+0

Cùng một vấn đề ở đây. Tôi bắt đầu với việc thêm một danh sách trong bảng chính của tôi nhưng không có ý tưởng làm thế nào tôi ràng buộc nó. OT: Tôi hy vọng bạn đã cài đặt VS2010 SP1. Đó là những gì tôi nhấn đầu tiên trong khi tìm kiếm câu trả lời. –

Trả lời

3

Tôi đã giải quyết điều này bằng cách làm cho đối tượng của tôi quay lại như một danh sách phẳng của đối tượng ẩn danh có tất cả thuộc tính của liên hệ cũng như các thuộc tính bổ sung của đối tượng cha. Sau đó, trong báo cáo RDLC, thêm một bảng và ràng buộc các thuộc tính của đối tượng liên lạc và sau đó thêm một nhóm vào các thuộc tính cha mẹ.

Tóm tắt là để tạo bố cục như vậy, bạn cần thêm nhóm.

+1

bạn có thể giải thích thêm về cách bạn lặp qua danh sách trên RDLC không? Tôi đã thử điều đó và nó không hiển thị giá trị. Bạn có ý gì khi thêm nhóm? – iberodev

0

Đây có lẽ không phải là câu trả lời phù hợp, nhưng khi tôi cảm thấy thiếu tài liệu về chủ đề này khuyến khích tôi đăng bài về những phát hiện của mình.

Giả sử Nếu tôi có danh sách lồng nhau của các đối tượng con trong đối tượng cha. Đây là một tình huống rất phổ biến, ví dụ, nếu bạn có một đối tượng đặt hàng (cha mẹ), bạn có thể sẽ có một danh sách các mục đặt hàng (trẻ em), làm thế nào để bạn hiển thị tất cả các thông tin với rdlc? Có hai cách, 1 cách sử dụng subreport và 2 là sử dụng nhóm. Tôi nhận ra rằng cả hai đều có thể đạt được điều tương tự đang hiển thị danh sách chi tiết trên báo cáo.

public class Order{ 
    public int OrderID {get; set;} 
    public string Descrpition {get; set;} 
    public List<OrderItem> OrderItems {get; set;} 
} 
public class OrderItem{ 
    public int OrderItemID {get; set;} 
    public decimal Price{get; set;} 
} 

Cách dễ nhất là sử dụng nhóm. Với việc nhóm, bạn phải tạo một kiểu dữ liệu mới có chứa các thuộc tính của cha và con. Tôi tin rằng cách này hoạt động với nhiều danh sách lồng nhau của các đối tượng cũng có. Nó có vẻ ngu ngốc, nhưng hầu hết thời gian bạn phải tạo ra một kiểu dữ liệu mới anyway vì các loại bạn cần để hiển thị trên báo cáo khác nhau từ các đối tượng kinh doanh:

public class OrderReport{ 
    public int OrderID {get; set;} 
    public string Description {get; set;} 
    public int OrderItemID {get; set;} 
    public decimal Price {get; set;} 
} 

Sau đó trên rdlc, bạn chỉ cần có để tạo nhóm hàng cha và nhóm hàng con, Cha mẹ nên được nhóm theo OrderID, nhóm hàng con nên được đặt thành "hiển thị chi tiết". Tôi nghĩ bạn có thể làm điều này nhiều lần để đạt được danh sách các đối tượng lồng nhau đa cấp.

+0

Nghe có vẻ ngu ngốc. ¿Nếu chúng ta có nhiều cấp độ lồng nhau thì sao? Làm phẳng các đối tượng cực kỳ kém hiệu quả và khó thực hiện – JavierIEH

1

Bạn thực sự không phải làm phẳng đối tượng của mình. Thay vào đó, bạn có thể liên kết nhiều bộ dữ liệu để báo cáo. Sau đó, bạn có thể gán nhiều nguồn dữ liệu báo cáo cho báo cáo của mình qua mã. Đây là mẫu đang hoạt động:

List<Loan> loans = new List<Loan>(); 
loans.Add(GetLoanByLoanNumber(loanNumber)); 

LocalReport report = new LocalReport(); 
report.ReportPath = HostingEnvironment.MapPath("~/bin/Report/Receipt.rdlc"); 

ReportDataSource loanDetailsDataSource = new ReportDataSource(); 
loanDetailsDataSource.Name = "LoanDataSet"; //This refers to the dataset name in the RDLC file 
loanDetailsDataSource.Value = loans; 
report.DataSources.Add(loanDetailsDataSource); 

ReportDataSource loanItemsDataSource = new ReportDataSource(); 
loanItemsDataSource.Name = "LoanItemsDataSet"; 
loanItemsDataSource.Value = loans[0].loanItems; 
report.DataSources.Add(loanItemsDataSource); 

ReportDataSource principalPaymentDataSource = new ReportDataSource(); 
principalPaymentDataSource.Name = "PrincipalPaymentDataSet"; 
principalPaymentDataSource.Value = loans[0].principalPayments; 
report.DataSources.Add(principalPaymentDataSource); 

ReportDataSource interestPaymentDataSource = new ReportDataSource(); 
interestPaymentDataSource.Name = "InterestPaymentDataSet"; 
interestPaymentDataSource.Value = loans[0].interestPayments; 
report.DataSources.Add(interestPaymentDataSource); 

Hy vọng điều này sẽ giúp ai đó!

0

@Bharath hoàn toàn đúng khi nói rằng bạn có thể chỉ định báo cáo nhiều hơn một nguồn dữ liệu và mã trong câu trả lời đó bao gồm việc gán dữ liệu cho báo cáo.

Nếu bạn đang tạo các báo cáo thông qua các thiết kế intially, sau đó có hai nguồn dữ liệu cho báo cáo trông như thế này:

RDLC Report Designer with two DataSets

Để có được bộ dữ liệu thứ hai, nhấp chuột phải vào thư mục Datasets trong cây và chọn 'Thêm tập dữ liệu ..'

Sau đó, bạn có thể sử dụng các trường từ cả hai Tập dữ liệu trên báo cáo; trong ảnh chụp màn hình phía trên TextBoxes được liên kết với DataSet1 và bảng được điền từ DataSet2.

Các vấn đề liên quan