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]); }
因此,所有数据源均已复制。如果没有必要,则只能克隆所需的克隆。
而已。几十行代码行使将带和对象从一个报告复制到另一个报告成为可能。如果乐队中有很多对象,那么与设计师复制它们会很漫长而乏味,并且从头开始创建它们会花费更长的时间。
当然,如果在此示例中基线报告仅复制了条带,则可以通过简单地复制和粘贴报告文件来更轻松地执行此任务。撇开笑话,您可以在不需要新报告中所有波段的情况下,使用此方法从一个集合中复制一个或多个波段。或者,您可以从一个报表中获取页眉,从另一个报表中获取数据带,并从第三个报表中获取页脚。
还想要更多吗?您可以在【慧都网】查找需要的教程资源。