【问题标题】:Crystal Report - Setting DataSource to multiple Subreports won't work (.NET)Crystal Report - 将 DataSource 设置为多个子报表不起作用 (.NET)
【发布时间】:2015-09-23 15:10:43
【问题描述】:

我是 Crystal Reports 的新手,在使用 CR for Visual Studio 时很快遇到了问题。

我设计了一个仅包含两个子报表的报表。主报告根本没有进一步的数据。我创建了一个包含两个表的 DataSet (xsd) - 每个子报表一个。在 Visual Studio 中,我创建了两个子报表并添加了正确的表来插入数据字段。我没有在主报表中添加 DataTable,因为它没有自己的数据。这是在 Visual Studio 中使用模板设计器完成的(不确定名称是否正确)

在代码中,我将一些虚拟数据添加到 DataSet 的两个表中,并将正确的表添加到相应的子报表中。然后报表显示在 Crystal Report Viewer 中。但是根本没有数据,我得到一个空页面。

我已经确认 DataTables 正确填充了我的虚拟数据,并且使用了正确的报表和子报表。

我做错了什么?请参阅下面的代码:

 DataSet1 ds1 = new DataSet1(); // my DataSet with 2 tables
            report.DataSourceConnections.Clear(); //report is the ReportDocument with the correct Report

            DataTable t1 = ds1.Tables.Add("DataTable1");
            t1.Columns.Add("Id", Type.GetType("System.String"));
            t1.Columns.Add("Feld1", Type.GetType("System.String"));

            DataTable t2 = ds1.Tables.Add("DataTable2");
            t2.Columns.Add("Id", Type.GetType("System.String"));
            t2.Columns.Add("Feld1", Type.GetType("System.String"));
            t2.Columns.Add("Feld2", Type.GetType("System.String"));

            DataRow r;
            int i = 0;
            for (i = 0; i <= 9; i++)
            {
                r = t1.NewRow();
                r["Id"] = i.ToString();
                r["Feld1"] = string.Format("Item1{0}", i);
                t1.Rows.Add(r);
            }

            DataRow r2;
            int i2 = 0;
            for (i2 = 0; i2 <= 9; i2++)
            {
                r2 = t2.NewRow();
                r2["Id"] = i2.ToString();
                r2["Feld1"] = string.Format("Item1{0}", i2);
                r2["Feld2"] = string.Format("Item2{0}", i2);
                t2.Rows.Add(r2);
            }

            report.Subreports[0].DataSourceConnections.Clear();
            report.Subreports[1].DataSourceConnections.Clear();
            report.Subreports[0].SetDataSource(ds1.Tables[0]);
            report.Subreports[1].SetDataSource(ds1.Tables[1]);

报告导出为 PDF 文件:

report.ExportToDisk(ExportFormatType.PortableDocFormat, "D:\\test.pdf");

【问题讨论】:

  • 您将子报表放在了哪个部分?如果您将它们放在详细信息部分,它们将不会显示,因为如果主报告没有数据,详细信息部分不会显示。
  • 所以主报表必须有自己的数据才能显示子报表?为什么?如果主报表只是充当不同子报表的容器,我该怎么办?
  • 经过反复试验,我注意到主报告只需要通过字段资源管理器添加一个数据表。我什至不需要将该 DataTable 的某些字段添加到主报告中以供上级报告显示。这被认为是错误还是功能?
  • 主报表不需要数据。仅当您想使用详细信息部分时。您可以尝试将子报表移动到报表标题部分。
  • @heringer:请在下面的回答中查看我的评论。

标签: datatable crystal-reports dataset subreport


【解决方案1】:

所以,根据上面的 cmets,我知道最好的解决方案是将您的子报表移动到报表标题。

【讨论】:

  • 不行,子报表需要放在details部分。主报表用于定义整个报表的布局,而子报表只显示纯数据。
  • 子报表不需要放在细节部分来实现这个结果,除非你有一个我无法想象的非常具体的要求。能否提供一份报告设计的屏幕截图以帮助我理解它?
猜你喜欢
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多