c# - 创建包含多个表的 rdlc 报告(一对多关系)

标签 c# .net entity-framework report rdlc

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

注意:这些表最初是使用 Entity Framework 代码优先创建的

这是两个表(和父表):

Quotation model

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

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

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

Report

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

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

关于c# - 创建包含多个表的 rdlc 报告(一对多关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48843956/

相关文章:

c# - SQLite LINQ 提供程序数据上下文

c# - EF delete 尝试更新外键

c# - requiredif Entity Framework 空字段

c# - 获取特定日期

c# - blittable 类型的多维数组 - 如何获得指向内存的固定不安全指针?

c# - Synchronization.Context 在 Post 上为 null 但在 Send 上不为空

c# - 安装和使用 System.Data.SQLite(ADO.NET 提供程序)

c# - 团队环境 Entity Framework 代码优先 - 仅删除 _MigrationHistory 表以将模型项目重新同步到数据库是否合适?

c# - Azure 服务总线客户端是否会自动重试从服务总线返回的暂时性错误?

c# - 如何更改 Entity Framework 为 Datetime 生成 SQL 精度的方式