【问题标题】:Creating an rdlc report with multiple tables (one-to-many relationship)创建具有多个表的 rdlc 报告(一对多关系)
【发布时间】:2018-02-22 13:59:24
【问题描述】:

所以,我是 rdlc 的新手(实际上是一般的报告)。我有一个与另一个表具有一对多关系的表,我试图在 rdlc 报告中将它们表示为多个表每个项目

注意:这些表最初是使用实体框架代码优先创建的

这是两个表(和父表)

现在,通常如果我只有[Quotation] 和一些[QuotationItem]s,我只需在报告顶部添加来自[Quotation] 的信息,来自每个[QuotationItem] 的信息将是以表格内的一行表示 (Tablix)。

问题是:每个[QuotationItem]有很多[QuotationItemQuantity](目前是三个),它们也需要被表示。

所以,我的报告应该是这样的:

但我不知道如何为每个项目 (QuotationItem) 显示多个表格(或一个列表和表格)。我在列表中尝试了嵌套表和表,但这似乎是不允许的(我得到一个“详细成员只能包含静态内部成员” 错误)。

我阅读了有关子报告的内容,我认为这可能是可行的方法,但我不确定在这种情况下如何使用子报告,或者这是否真的是正确的方法。

注意:如上所述,每个QuotationItem 目前有 3 个数量,但将来可能会更改,因此如果列可以是动态的,那就太好了,但是,此时这不是必需的。

有什么建议吗?

【问题讨论】:

    标签: c# .net entity-framework report rdlc


    【解决方案1】:

    嗯,我希望(并且仍然希望)得到一个更优雅的解决方案而不是这个丑陋的解决方案(我现在不得不使用它),但它无论如何都做了它应该做的事情。

    我发布它是因为它可能会帮助遇到类似问题的人。这是我所做的:

    准备数据:

    • 使用 VS 设计器创建了一个虚拟 DataSet,并向其中添加了一个 DataTable。
    • 将两个表中的所有必需列添加到此数据表中。
    • 添加了 DataSet 作为报表的数据源。
    • 为了传递实际数据,我将填充一个 DataTable 与设计的结构相同,然后使用以下内容将其传递给报告:

      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 个表格通过删除“表格”之间不需要的单元格的边框
    • 将虚拟数据集中的字段添加到第一个表格(数量信息)和表格上方(报价项目信息)的相应单元格中。
    • 对于第二个和第三个“表”,只需使用表达式根据第一个表中的值进行计算。

    注意:问题和答案中的某些字段/变量名称已更改,但思路保持不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多