2012-02-13 32 views
5

Làm cách nào để tạo báo cáo có mối quan hệ cha-con-cháu sử dụng các đối tượng kinh doanh tùy chỉnh/POCO?Dịch vụ báo cáo: Nguồn dữ liệu đối tượng kinh doanh với cha-con-cháu

public class Invoice 
{ 
    public List<Account> Accounts { get; set; } 
} 

public class Account 
{ 
    public List<LineItem> LineItems { get; set; } 
} 

public void GenerateReport() 
{ 
    var localReport = new LocalReport(); 
    localReport.LoadReportDefinition(GetEmbeddedResource("Invoice.rdlc")); 
    localReport.DataSources.Add(new ReportDataSource("InvoiceDataset", new List<Invoice> { invoices })); 
} 

Tốt hơn là sử dụng điều khiển Bảng và Danh sách trên Subreports. Dịch vụ báo cáo v10 với xử lý cục bộ (tệp .rdlc).

Trả lời

8

Invoice.rdlc

  • Thêm một tập dữ liệu tên InvoiceDataset (từ cửa sổ công cụ báo cáo dữ liệu)
  • Thêm một danh sách kiểm soát (từ báo cáo phải được ràng buộc vào một danh sách các hoá đơn ngay cả khi danh sách sẽ chỉ bao giờ chứa một phần tử)
  • Trong điều khiển Danh sách, thêm các trường Cấp hóa đơn như Tên khách hàng
  • Trong điều khiển Danh sách, thêm điều khiển Subreport trỏ đến Account.rdlc với tên "Tài khoản" và một tham số của InvoiceId

Account.rdlc

  • Thêm một tập dữ liệu tên AccountDataset (từ cửa sổ công cụ báo cáo dữ liệu)
  • Thêm một tham số InvoiceId để phù hợp với thông số quy định tại Invoice.rdlc Điều khiển kiểm soát phụ
  • Thêm điều khiển Danh sách
  • Trong điều khiển Danh sách thêm các trường Cấp tài khoản như Số tài khoản
  • Trong Danh sách kiểm soát thêm một subreport trỏ đến LineItem.rdlc với hai tham số: InvoiceId và AccountID

LineItem.rdlc

  • Thêm một tập dữ liệu tên LineItemDataset (từ cửa sổ công cụ báo cáo dữ liệu)
  • Thêm tham số InvoiceId và AccountId để khớp với các tham số được chỉ định trong Account.rdlc Điều khiển kiểm soát phụ
  • Thêm danh sách điều khiển
  • Trong Danh sách kiểm soát thêm Dòng lĩnh vực Item-level như mô tả, Số lượng, Giá

Để tạo báo cáo này như một pdf:

public byte[] GenerateInvoicePdf(Invoice invoice) 
{ 
    var localReport = new LocalReport(); 

    localReport.LoadReportDefinition(GetEmbeddedResource("Invoice.rdlc")); 
    localReport.LoadSubreportDefinition("Account", GetEmbeddedResource("Account.rdlc")); 
    localReport.LoadSubreportDefinition("LineItem", GetEmbeddedResource("LineItem.rdlc")); 
    var datasource = new List<Invoice> {invoice}; 
    localReport.DataSources.Add(new ReportDataSource("InvoiceDataset", datasource)); 
    localReport.SubreportProcessing += 
     (o, args) => 
      { 
       if (args.ReportPath == "Account") 
       { 
        var invoiceId = long.Parse(args.Parameters["InvoiceId"].Values[0]); 
        var invoice = datasource.First(x => x.InvoiceId == invoiceId); 
        args.DataSources.Add(new ReportDataSource("AccountDataset", invoice.Accounts)); 
       } 
       else if (args.ReportPath == "LineItem") 
       { 
        var invoiceId = long.Parse(args.Parameters["InvoiceId"].Values[0]); 
        var accountId = long.Parse(args.Parameters["AccountId"].Values[0]); 
        var invoice = datasource.First(x => x.InvoiceId == invoiceId); 
        var account = invoice.Accounts.First(x => x.AccountId == accountId); 
        args.DataSources.Add(new ReportDataSource("LineItemDataset", account.LineItems)); 
       } 
      }; 
    return localReport.Render("pdf"); 
} 
Các vấn đề liên quan