在WPF应用中使用FastReport.WPF报表模块

这篇具有很好参考价值的文章主要介绍了在WPF应用中使用FastReport.WPF报表模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

FastReport是一个非常不错的报表组件,在Winform应用中常常使用它进行报表的设计、预览展现、打印或者导出文件(PDF、Excel)等,可以设计打印各种各样的报表,本篇随笔继续介绍当前最新的FastReport报表模块,其中FastReport.WPF是专门针对WPF的报表组件。

1、回顾FastReport应用

我们回顾一下,我之前在随笔中总结的一些FastReport应用案例,虽然WPF使用上有所差异,不过报表的格式是同样的,处理规则也是大同小异。

《使用FastReport报表工具生成标签打印文档》、《使用FastReport报表工具生成图片格式文档》、《使用FastReport报表工具生成报表PDF文档》、《使用FastReport报表工具实现信封套打功能》、《在Winform开发中使用FastReport创建报表》、《在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表》、《利用FastReport传递图片参数,在报表上展示签名信息》,可以说在Winform报表处理中,我还是比较喜欢FastReport的的纯.net开发的报表组件。

我们可以看到,FastReport报表还是非常强大的,可以处理各种不同的报表展示。

在WPF应用中使用FastReport.WPF报表模块

在WPF应用中使用FastReport.WPF报表模块

在WPF应用中使用FastReport.WPF报表模块

 文章来源地址https://www.toymoban.com/news/detail-797376.html

2、FastReport.WPF报表模块的使用

FastReport.WPF 报表模块是2023年底才出来的一款专门针对WPF的报表应用,我们在Nugget上搜索FastReport.WPF,添加对应的FastReport.WPF.Demo模块就可以在我们的WPF应用中添加测试版本的FastReport.WPF组件了,如果我们有正式版本,也可以安装后直接添加本地引用文件即可。

在WPF应用中使用FastReport.WPF报表模块

报表的预览和设计可以通过直接在WPF后端代码打开对应的报表组件实现相应的效果,也可以通过在页面中展示对应组件(预览组件、设计组件)来承载报表信息,我们针对两种情况分别进行相关的说明。

我们在WPF的应用端中添加一个报表的测试页面,用来测试FastReport的报表处理,如下界面所示。

在WPF应用中使用FastReport.WPF报表模块

一般的FastReport报表的处理,差不多就是那几个步骤:

  1、创建报表对象

  2、加载报表文件

  3、加载报表相关数据或者参数

  4、调用报表设计或者预览处理。

我们来看看简单的按钮单击调用报表的处理,如下代码所示。

/// <summary>
/// 报表预览
/// </summary>
private async void btnPreviewReport_Click(object sender, RoutedEventArgs e)
{
    var reportFile = Path.Combine(baseDir, "Report/Simple List.frx");
    using (var report = new Report())
    {
        //加载报表
        report.Load(reportFile);
        //创建数据源
        var ds = GetNorthWindDataSet();
        //绑定数据源
        report.RegisterData(ds, "NorthWind");

        //运行报表
        report.Show();
    }
}
/// <summary>
/// 报表设计
/// </summary>
private void btnDesignReport_Click(object sender, RoutedEventArgs e)
{
    var reportFile = Path.Combine(baseDir, "Report/Simple List.frx");
    using (var report = new Report())
    {
        //加载报表
        report.Load(reportFile);
        //创建数据源
        var ds = GetNorthWindDataSet();
        //绑定数据源
        report.RegisterData(ds, "NorthWind");

        //运行报表
        report.Design();
    }
}

当然我们也可以在Xaml中定义Command来处理对应的按钮事件。

在WPF应用中使用FastReport.WPF报表模块

 Xam界面代码如下所示:

<ui:CardAction
    Grid.Row="0"
    Grid.Column="0"
    Margin="0,0,14,0"
    Padding="0"
    VerticalAlignment="Stretch"
    Command="{Binding DataContext.PreviewReportCommand, Mode=OneWay}"
    CommandParameter="Simple List.frx"
    IsChevronVisible="False">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Image
            Width="60"
            Margin="24,0,0,0"
            Source="/Assets/dashboardItem1.png" />
        <StackPanel
            Grid.Column="1"
            Margin="24"
            VerticalAlignment="Center">
            <ui:TextBlock
                FontTypography="BodyStrong"
                Text="报表打印预览"
                TextWrapping="WrapWithOverflow" />
            <ui:TextBlock
                Appearance="Tertiary"
                Text="NorthWind报表预览"
                TextWrapping="WrapWithOverflow" />
        </StackPanel>
    </Grid>
</ui:CardAction>

Command的处理后端代码如下所示。

/// <summary>
/// 预览报表
/// </summary>
/// <param name="path">报表路径</param>
[RelayCommand]
private void PreviewReport(string path)
{
    var reportFile = Path.Combine(Environment.CurrentDirectory, $"Report/{path}");
    if(File.Exists(reportFile))
    {
        using (var report = new Report())
        {
            //加载报表
            report.Load(reportFile);
            //创建数据源
            var ds = GetNorthWindDataSet();
            //绑定数据源
            report.RegisterData(ds, "NorthWind");
            //运行报表
            report.ShowAsync();
        }
    }
}

除了我们这里使用MVVM的处理定义,代码逻辑上和单击事件的处理差不多。

FastReport报表可以导出Excel、HTML、PDF等文档格式的文件,如下代码是导出PDF的处理代码,可以把报表导出和预览效果一样的PDF文件。

/// <summary>
/// 导出PDF
/// </summary>
/// <param name="path"></param>
[RelayCommand]
private void ReportExport(string path)
{
    var reportFile = Path.Combine(baseDir, $"Report/{path}");
    if (File.Exists(reportFile))
    {
        using (var report = new Report())
        {
            //加载报表
            report.Load(reportFile);
            //创建数据源
            var ds = GetNorthWindDataSet();
            //绑定数据源
            report.RegisterData(ds, "NorthWind");
            //运行报表
            report.Prepare();
            //导出PDF报表
            var file = FileDialogHelper.SavePdf("result.pdf");
            if (!string.IsNullOrEmpty(file))
            {
                var export = new PDFExport();
                report.Export(export, file);
            }
            //打开PDF
            if (File.Exists(file))
            {
                Process.Start("explorer.exe", file);
            }
        }
    }
}

导出文件后,我们在WPF程序中,可以通过 Process.Start("explorer.exe", file); 命令进行打开PDF文档。

在WPF应用中使用FastReport.WPF报表模块

这种通过FastReport内置类的Design或者Show方法展示的报表,是一个独立的窗口打开的。

有时候为了方便,我们可能需要设计一个页面或者窗口来放置我们的设计或者预览报表,那么我们可以通过在页面中展示对应组件(预览组件、设计组件)来承载报表信息。

需要在页面中添加对应的命名空间,如下代码所示。

<Page
    x:Class="WHC.SugarProject.WpfUI.Views.Pages.FastReportPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Design="clr-namespace:FastReport.Design;assembly=FastReport.WPF"
    xmlns:Preview="clr-namespace:FastReport.Preview;assembly=FastReport.WPF"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WHC.SugarProject.WpfUI.Views.Pages"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
    Title="FastReportPage"
    d:DesignHeight="850"
    d:DesignWidth="800"
    mc:Ignorable="d">

在页面中可以放置对应的组件对象,如下代码所示。

<StackPanel
    x:Name="reportPanel"
    Grid.Row="2"
    Grid.ColumnSpan="3"
    Margin="10">
    <Preview:WpfPreviewControl
        x:Name="previewControl"
        Height="600"
        Margin="10"
        ToolbarVisible="False" />
    <Design:WpfDesignerControl
        x:Name="designerControl"
        Height="600"
        Margin="10" />
</StackPanel>

展示报表的时候,后台代码处理如下所示。

private void btnShowReport_Click(object sender, RoutedEventArgs e)
{
    var reportFile = Path.Combine(baseDir, "Report/report.frx");
    var report = new Report();
        //加载报表
        report.Load(reportFile);
    //创建数据源
    var list = CreateBusinessObject();
    //绑定数据源
    report.RegisterData(list, "Categories");
    report.PrepareAsync(previewControl); //运行报表
}
private void btnShowDesign_Click(object sender, RoutedEventArgs e)
{
    var reportFile = Path.Combine(baseDir, "Report/report.frx");
    var report = new Report();
    //加载报表
    report.Load(reportFile);
    //创建数据源
    var list = CreateBusinessObject();
    //绑定数据源
    report.RegisterData(list, "Categories");
    designerControl.Report = report;
}        

在WPF应用中使用FastReport.WPF报表模块

当然我们也可以单独设计一个页面来承载,如下页面所示。

在WPF应用中使用FastReport.WPF报表模块

通过页面的封装,我们在页面中提供一个公用的报表组件。

/// <summary>
/// FastReportPreview.xaml 的交互逻辑
/// </summary>
public partial class FastReportPreview : Window
{
    /// <summary>
    /// 报表对象
    /// </summary>
    public Report Report { get; set; } = new();//初始化对象

    public FastReportPreview()
    {
        InitializeComponent();

        this.previewControl.Loaded += (s, e) =>
        {
            Report.PrepareAsync(previewControl); 
        };
    }
}

在调用报表页面展示的时候,对报表对象做相应的处理即可,然后调用窗口进行展示。

/// <summary>
/// 使用自定义窗口打开报表预览
/// </summary>
private void btnShowReport2_Click(object sender, RoutedEventArgs e)
{
    var dlg = App.GetService<FastReportPreview>();
    if (dlg != null)
    {
        var reportFile = Path.Combine(baseDir, "Report/report.frx");

        //加载报表
        dlg.Report.Load(reportFile);
        //创建数据源
        var list = CreateBusinessObject();
        //绑定数据源
        dlg.Report.RegisterData(list, "Categories");

        dlg.ShowDialog();
    }
}

同理设计报表也是一样的处理方式,不在赘述。

以上就是我WPF应用中使用FastReport.WPF报表模块的一些经验总结,结合之前的Winform案例经验,我们可以充分的利用FastReport的报表的相关功能,实现我们所需要的报表展示或者文件导出了。

 

到了这里,关于在WPF应用中使用FastReport.WPF报表模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF如何构建MVVM+模块化的桌面应用

    模块化是一种分治思想,不仅可以分离复杂的业务逻辑,还可以进行不同任务的分工。模块与模块之间相互独立,从而构建一种松耦合的应用程序,便于开发和维护。 .NET 6 + WPF + Prism (v8.0.0.1909) + HandyControl (v3.4.0) 什么是MVVM Model-View-ViewModel  是一种软件架构设计,它是一种简化

    2024年02月13日
    浏览(7)
  • 使用JSON进行数据可视化:在报表和图形展示中的应用

    使用JSON进行数据可视化是一种常见的做法,特别是在数据驱动的网站和应用中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于阅读和写入,同时也易于机器解析和生成。以下是如何在报表和图形展示中使用JSON的一些方法: 报表 : 数据准备 : 首先,你需要

    2024年02月03日
    浏览(9)
  • 使用WPF开发BLE应用

    使用.NET Framework 先上官方文档: 蓝牙 GATT 客户端,文档是关于UWP开发BLE的,WPF如果要使用BLE的API,得手动添加几个引用(可参考这篇文章),该文章说需要添加3个引用,不过我创建的WPF应用默认已经有 WindowBase 引用,只添加了一个 Windows.winmd 引用就可以使用BLE相关的API了,另

    2024年02月03日
    浏览(12)
  • 【WPF应用39】WPF 控件深入解析:SaveFileDialog 的属性与使用方法

    在 Windows Presentation Foundation (WPF) 中,SaveFileDialog 控件是一个非常重要的文件对话框,它允许用户在文件系统中选择一个位置以保存文件。这个控件提供了很多属性,可以自定义文件对话框的显示内容和行为。 本文将详细介绍 SaveFileDialog 控件的属性和功能,如何在 WPF 应用程序

    2024年04月12日
    浏览(11)
  • 在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理

    WPF应用中,控件本身也可以通过实现事件代码实现拖动的处理,不过如果我们使用GongSolutions.WPF.DragDrop来处理,事情会变得更加简单轻松,它支持很多控件的拖动处理,如ListBox, ListView, TreeView, DataGrid等源自ItemsControl的控件,本篇随笔介绍在工作流模块中拖动TreeView和DataGrid列表

    2024年02月05日
    浏览(8)
  • WPF线程使用详解:提升应用性能和响应能力

    在WPF应用程序开发中,线程的合理使用是保证应用性能和响应能力的关键。WPF提供了多种线程处理方式,包括UI线程、后台线程、Task/Async Await和BackgroundWorker。这些方式与传统的Thread类相比,更加适用于WPF框架,并能够简化线程操作。下面将详细介绍这些线程方式的特点以及与

    2024年02月15日
    浏览(20)
  • 在WPF应用中,结合阿里矢量图标库使用Geometry图标

    在我们的SqlSugar开发框架的WPF应端中,有时候我们需要在按钮或者其他界面元素上使用一些图标,框架中我们可以使用 lepoco/wpfui 项目的图标库,也可以使用Font-Awesome-WPF 图标库,另外我们如果喜欢阿里矢量图标库的,也可以通过使用Geometry图标来实现图标的展示,本篇随笔介

    2024年01月25日
    浏览(10)
  • WPF嵌入外部exe应用程序-使用Winfom控件承载外部程序

    首先要解决在WPF中如何使用Winfom控件的问题,官方对此有支持的方式。 在引用管理器中添加winfrom相关的程序集 System.Windows.Forms 和 WindowsFormsIntegration 。 然后使用winform的控件,得在外面套一层WindowsFormsHost(好像添加了WindowsFormsIntegration,不使用wfi:也能使用) 这样就可以在WPF中使

    2024年02月17日
    浏览(11)
  • 怎样在应用中实现自助报表功能

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇将记录几次面试中经常被问到的知识点以及对学习的知识点总结。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬 🤩🤩。 如果文章有什么需要改进的地方还请大佬不吝赐教

    2024年02月21日
    浏览(7)
  • 深信服应用交付报表任意文件读取漏洞

      深信服应用交付报表系统 download.php文件存在任意文件读取漏洞,攻击者通过漏洞可以下载服务器任意文件。   深信服应用交付报表系统   app=“SANGFOR-应用交付报表系统”   这里通过抓包进行文件读取,当然也可以在页面中直接进行获取。

    2024年02月10日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包