【问题标题】:Subtable in ReportViewerReportViewer 中的子表
【发布时间】:2015-11-17 06:35:17
【问题描述】:

我需要在报告查看器(rdlc 文件)中显示客户列表(每页一个客户),以及与该客户相关的订单(在客户信息的同一页面上)和 cmets。如何插入 tablix 以便为每个客户设置一个分页符?

它应该是这样的:

这就是我希望在报告中添加数据的方式:

List<Customer> customers = db.Customers;

LocalReport.DataSources.Add(new ReportDataSource("Customers", customers))

public class Customer
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
    public List<Order> Orders { get; set; }
    public List<Comment> Comments { get; set; }
}

public class Order
{
    public string Product { get; set; }
    public int Qty { get; set; }
    public decimal Price { get; set; }
}

public class Comment
{
    public string Description { get; set; }
}

编辑:也许我没有正确表达。我不知道如何在列表项上显示每个客户的订单和 cmets。我需要如何分组?如何将 DataSet 设置为子表(对于订单和 cmets)

【问题讨论】:

  • 在报表设计器中,右键单击此项并选择“在此列表之前插入分页符”应该可以工作。
  • 将Customer上的行组添加到Tablix,组更改后将行组设置为分页符。

标签: c# reportviewer


【解决方案1】:

以下MSDN页面https://msdn.microsoft.com/en-us/library/dd207058.aspx 表示如果要向表格、矩阵或列表中的行组添加分页符,请按照以下步骤操作:

  1. 在“分组”窗格中,右键单击行组,然后单击组属性
  2. 在“分页符”选项卡上,选择在组的每个实例之间以在表中组的每个实例之间添加分页符。
  3. (可选)选择也位于组的开头也位于组的末尾以指定在组开始或结束时添加分页符桌子。

【讨论】:

    【解决方案2】:

    我终于使用子报表了:

    1. 标题(姓名和电话)、子报告位置和分页符的大型报告

    2. 订单的一个子报表 (CustomersOrders.rdlc):添加子报表参数 (CustomerId)

    3. 评论的一个子报表 (CustomersComments.rdlc):添加子报表参数 (CustomerId)

    4. 报表呈现器窗口中包含客户列表的静态属性

    在报表渲染器窗口中添加一个 SubreportProcessing 处理程序:

    LocalReport.SubreportProcessing += Customers_SubreportProcessing;
    
    private void Customers_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
    {
        ReportParameterInfo customerId = e.Parameters.FirstOrDefault(c => c.Name == "CustomerId");
        if (customerId== null)
            return;
    
        Customer customer = _customersList
            .FirstOrDefault(c => c.CustomerId == customerId.Values.FirstOrDefault());
    
        if (e.ReportPath == "CustomersOrders") // Name for subreport CustomersOrders.rdlc
        {
            e.DataSources.Add(new ReportDataSource("Orders", customer.Orders));
        }
        else if (e.ReportPath == "CustomersComments") // Name for subreport CustomersComments.rdlc
        {
            e.DataSources.Add(new ReportDataSource("Comments", customer.Comments));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2013-10-01
      相关资源
      最近更新 更多