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 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报表正在慧都网火热销售中!点击【在线客服】咨询详情

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值