【问题标题】:Reporting Services: Business object data source with parent-child-grandchildReporting Services:具有父-子-孙的业务对象数据源
【发布时间】:2012-03-05 09:39:38
【问题描述】:

如何使用 POCO/自定义业务对象创建具有父子孙关系的报表?

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

最好在子报表上使用表格和列表控件。具有本地处理功能的 Reporting Services v10(.rdlc 文件)。

【问题讨论】:

    标签: reporting-services poco master-detail


    【解决方案1】:

    Invoice.rdlc

    • 添加名为 InvoiceDataset 的数据集(从报告数据工具窗口)
    • 添加一个列表控件(因为报表必须绑定到发票列表,即使该列表只包含一个元素)
    • 在列表控件中添加发票级别字段,如客户名称
    • 在 List 控件中添加一个指向 Account.rdlc 的 Subreport 控件,其名称为“Account”,参数为 InvoiceId

    Account.rdlc

    • 添加名为 AccountDataset 的数据集(从报告数据工具窗口)
    • 添加 InvoiceId 参数以匹配 Invoice.rdlc 子报表控件中指定的参数
    • 添加列表控件
    • 在列表控件中添加帐户级别字段,例如帐号
    • 在 List 控件中添加一个指向 LineItem.rdlc 的子报表,其中包含两个参数:InvoiceId 和 AccountId

    LineItem.rdlc

    • 添加名为 LineItemDataset 的数据集(从报表数据工具窗口)
    • 添加 InvoiceId 和 AccountId 参数以匹配 Account.rdlc 子报表控件中指定的参数
    • 添加列表控件
    • 在列表控件中添加行项目级字段,如描述、数量、价格

    将此报告生成为 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");
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多