所以,我是 rdlc 的新手(实际上是一般报告)。我有一个与另一个表具有一对多关系的表,我试图在 rdlc 报告中将它们表示为多个表每个项目。
注意:这些表最初是使用 Entity Framework 代码优先创建的。
这是两个表(和父表):
现在,通常如果我只有 [Quotation]
和一些 [QuotationItem]
,我只需添加来自 [Quotation] 的信息
在报告的顶部,每个 [QuotationItem]
的信息将在表 (Tablix) 中的一行中表示。
问题是:每个[QuotationItem]
也有很多 [QuotationItemQuantity]
(目前是三个) ,他们也需要被代表。
所以,我的报告应该是这样的:
但我一直在研究如何为每个项目 (QuotationItem) 显示多个表(或一个列表和多个表)。我尝试了嵌套表格和列表中的表格,但这似乎是不允许的(我收到一个“详细信息成员只能包含静态内部成员”错误)。
我了解了子报告,我认为这可能是可行的方法,但我不确定在这种情况下如何使用子报告,或者这是否真的是正确的方法。
注意:如上所述,每个 QuotationItem
目前有 3 个数量,但将来可能会更改,所以如果列可以是动态的,那就太好了,但是,这不是此时的要求。
有什么建议吗?
最佳答案
好吧,我一直希望(现在仍然如此)得到一个更优雅的解决方案而不是这个丑陋的解决方案(我现在不得不使用它)但它无论如何都做了它应该做的。
我发布它是因为它可能会帮助遇到类似问题的人。这是我所做的:
准备数据:
- 使用 VS 设计器创建了一个虚拟数据集,并向其中添加了一个数据表。
- 将两个表中的所有必需列添加到此数据表中。
- 添加了 DataSet 作为报告的数据源。
为了传递实际数据,我将使用与设计的结构相同的结构填充数据表,然后使用类似以下内容将其传递给报表:
private void Form_Load(object sender, EventArgs e) { rptViewerMain.LocalReport.ReportEmbeddedResource = "MyProjectName.QuotationReport.rdlc"; rptViewerMain.LocalReport.EnableExternalImages = true; if (QuotationInfo !=null && QuotationItems != null) { SetupReport(); } this.rptViewerMain.RefreshReport(); } private void SetupReport() { var param1 = new ReportParameter("MyFirstParameter", SomeValue); var param2 = new ReportParameter("MySecondParameter", SomeOtherValue); // etc // Pass Parameters rptViewerMain.LocalReport.SetParameters(new[] { param1, param2, "etc" }); // Prepare the DataTable and add the values to it DataTable dt = new MyDummyDataset.MyDesignedDataTable().Clone(); foreach (var qItem in QuotationItems) { dt.Rows.Add(qItem.ItemNumber, qItem.ItemDescription, "and", "so", "many", "more", "values"); } // Pass the DataTable to the report as the data source replacing the dummy DataSet rptViewerMain.LocalReport.DataSources.Add(new ReportDataSource("MyDummyDataset", dt)); }
设计报告:
- 在 RDLC 报告中只创建了一个表 (Tablix),并使用单元格边框使其看起来像 3 个表,通过删除“表”之间不需要的单元格的边框:
- 将虚拟数据集中的字段添加到第一个表(数量信息)和表上方(报价项目信息)中的相应单元格。
- 对于第二个和第三个“表”,仅使用表达式根据第一个表中的值进行计算。
注意:问题和答案中的一些字段/变量名称都已更改,但思路保持不变。
关于c# - 创建包含多个表的 rdlc 报告(一对多关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48843956/