FastReport .Net如何将Bands从一份报告复制到另一份报告

FastReport .NET是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能报表解决方案。它可以在Microsoft Visual Studio 2005-2019中使用。支持.Net Framework 2.0-4.x,.NET Core 3.0及以上版本。

在FastReport .NET 2021.1的新版本中,我们实现了对.NET 5的支持。添加了新条形码-Deutsce Post Leitcode。将RTF转换为报告对象的算法已得到显着改进。并且还添加了用于转换数字的新功能。慧都欢迎下载体验。

【慧都网】享高速免费下载FastReport.NET v2021.1最新版

有时需要在另一个报告中使用一部分报告。在简单的情况下,您可以使用报表继承来执行此操作。

例如,在某些情况下,所有报告都有共同的元素(公司徽标,签名等)。然后,可以将这些对象移至父报表,并在创建子报表时将其自动复制。因此,您无需每次都手动复制它们,从而大大简化并加速了新报告的创建。此外,如果您更改了父报表中的某些内容,这些更改也将反映在所有子报表中。

但是,报告继承有许多限制。在某些情况下,一个报告只有一个“父”报告,而使一个“父”报告成为完全不同的报告变得很有必要。似乎可以更改BaseReport属性,但不幸的是,它无法解决。

但是,可以通过一种奇妙的方式解决此问题-通过将一个报告代码中的带替换为另一个报告中的带。

假设有一个基准报告(base.frx),并且需要将其范围复制到子报告(child.frx)。您需要用“ Data1”名称替换PageHeader,PageFooter和DataBand。以下代码示例假定两个报告都位于C驱动器的根文件夹中。

首先,您需要下载两个报告:

Report base = new Report();
base.Load(@"C:\base.frx");
Report child = new Report();
child.Load(@"C:\child.frx");

下一步是从两个报告中获取页面。知道页面名称很重要。下面的示例假定两个报告中的页面名称均为“ Page1”:

ReportPage basePage = base.FindObject("Page1") as ReportPage;
ReportPage childPage = child.FindObject("Page1") as ReportPage;

如果您不知道页面名称,则可以从索引中获取它们。例如,进一步,我们可以访问两个报告的第一页:

ReportPage basePage = baseReport.Pages[0] as ReportPage;
ReportPage childPage = childReport.Pages[0] as ReportPage;

这两个选项都是合适的,并且会导致相同的结果。

 

现在,您可以替换PageHeader和 PageFooter。很简单:

childPage.PageHeader = basePage.PageHeader;
childPage.PageFooter = basePage.PageFooter;

这些行复制具有所有属性和设置的两个波段。此外,位于它们上面的所有对象都将被复制,并且属性不会丢失。

 

接下来,将DataBand替换为“ Data1”名称:

DataBand baseBand = basePage.FindObject("Data1") as DataBand;
DataBand childBand = childPage.FindObject("Data1") as DataBand;
// необходимо получить индекс Data1 в дочернем отчете
int childBandIndex = childPage.Bands.IndexOf(childBand);
// теперь его можно удалить
childPage.Bands.Remove(childBand);
// и вставить на его место бэнд из базового отчета
childPage.Bands.Insert(bandIndex, baseBand);

最后,将复制具有所有属性和子对象的波段,并传输与负责DataSource属性的数据源的绑定。没有此绑定,波段将无法正常工作,也不会从数据库输出数据。

 

我们只需要复制数据源。可以使用以下代码段完成此操作:

for (int i = 0; i < baseReport.Dictionary.DataSources.Count; i++)
{
 childReport.Dictionary.DataSources.Add(baseReport.Dictionary.DataSources[i]);
}

因此,所有数据源均已复制。如果没有必要,则只能克隆所需的克隆。

 

而已。几十行代码行使将带和对象从一个报告复制到另一个报告成为可能。如果乐队中有很多对象,那么与设计师复制它们会很漫长而乏味,并且从头开始创建它们会花费更长的时间。

当然,如果在此示例中基线报告仅复制了条带,则可以通过简单地复制和粘贴报告文件来更轻松地执行此任务。撇开笑话,您可以在不需要新报告中所有波段的情况下,使用此方法从一个集合中复制一个或多个波段。或者,您可以从一个报表中获取页眉,从另一个报表中获取数据带,并从第三个报表中获取页脚。

还想要更多吗?您可以在【慧都网】查找需要的教程资源。

FastReport .Net如何将Bands从一份报告复制到另一份报告

上一篇:④.nginx+php


下一篇:微信支付->公众平台