ReportViewer 中的子表
Subtable in ReportViewer
我需要在报告查看器(rdlc 文件)中显示客户列表(每页一个客户),以及与该客户相关的订单(在客户信息的同一页上)和评论。如何插入 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; }
}
编辑:可能是我表达不当。我不知道如何显示每个客户的订单和对列表项的评论。我需要如何分组?如何将 DataSet 设置为 Sub Table(用于订单和评论)
以下 MSDN 页面 https://msdn.microsoft.com/en-us/library/dd207058.aspx
指示如果要将分页符添加到 table、矩阵或列表中的行组,请执行以下步骤:
- 在“分组”窗格中,右键单击行组,然后单击组属性。
- 在“分页符”选项卡上,select 在组的每个实例之间 在 table 中的组的每个实例之间添加分页符.
- 可选,select 也在组的开头 或 也在组的结尾 指定当组在 table.
中开始或结束时添加分页符
我终于用上了子报表:
一份大报告标题(名称和 phone)、子报告位置和分页符
一个订单子报表 (CustomersOrders.rdlc):添加一个子报表参数 (CustomerId)
评论的一个子报表 (CustomersComments.rdlc):添加一个子报表参数 (CustomerId)
报表呈现器 window 上的静态 属性 包含客户列表
在报表呈现器上 window 添加 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));
}
}
我需要在报告查看器(rdlc 文件)中显示客户列表(每页一个客户),以及与该客户相关的订单(在客户信息的同一页上)和评论。如何插入 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; }
}
编辑:可能是我表达不当。我不知道如何显示每个客户的订单和对列表项的评论。我需要如何分组?如何将 DataSet 设置为 Sub Table(用于订单和评论)
以下 MSDN 页面 https://msdn.microsoft.com/en-us/library/dd207058.aspx 指示如果要将分页符添加到 table、矩阵或列表中的行组,请执行以下步骤:
- 在“分组”窗格中,右键单击行组,然后单击组属性。
- 在“分页符”选项卡上,select 在组的每个实例之间 在 table 中的组的每个实例之间添加分页符.
- 可选,select 也在组的开头 或 也在组的结尾 指定当组在 table. 中开始或结束时添加分页符
我终于用上了子报表:
一份大报告标题(名称和 phone)、子报告位置和分页符
一个订单子报表 (CustomersOrders.rdlc):添加一个子报表参数 (CustomerId)
评论的一个子报表 (CustomersComments.rdlc):添加一个子报表参数 (CustomerId)
报表呈现器 window 上的静态 属性 包含客户列表
在报表呈现器上 window 添加 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));
}
}