我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Winform项目中使用FastReport.Net报表控件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Winform项目中使用FastReport.Net报表控件

一、基本使用

1、准备工程和引入控件

1、下载、安装FastReport

这一步很简单,大家在其中文网站上下载最新版的demo版就可以了,直接安装就可以

替换破解文件:

Replace C:\Windows\Microsoft.NET\assembly\GAC_MSIL\FastReport\v4.0_2019.1.5.0__00000000000000000000000000\FastReport.dll with cracked one.

Assemblies from folders Framework X.0 is PublicKeyToken removed and strong name verification disabled.

安装之后大家会发现,VS里面什么都没有,不像有些插件直接会在ToolBox里显示,这里需要我们自己引入

2、准备工程、引入控件

首先我们使用VS新建一个WinForm工程,这里我使用的是VisualStutio2015版本

接着我们先引入FastReport的核心dll依赖,这些文件的目录在FastReport安装目录下,分别是FastReport.dll,FastReport.Editor.dll,FastReport.Bars.dll。

你可以使用Framework 4.0下的dll文件

接着我们需要3个窗体:MainForm,DesignForm,PreviewForm,其中MainForm为启动页面

现在我们需要在ToolsBox中引入我们需要的FastReport控件,首先我们在ToolsBox中新建一个Item,命名为FastReport

然后右键刚刚新建的选项卡->选择项,打开选择控件的对话框

然后我们点击左下角的浏览,选择刚刚的FastReport.dll,然后确定,之后再确定,就会成功导入以下新的控件

3、启动页设计

MainForm很简单,我们就放两个按钮,一个设计,一个浏览,分别打开两个窗口

事件

private void btnDesign_Click(object sender, EventArgs e)
{
    DesignForm dForm = new DesignForm();
    dForm.Show();

}

private void btnPreview_Click(object sender, EventArgs e)
{
    PreviewForm pForm = new PreviewForm();
    pForm.Show();
}

2、使用控件搭建窗体

1、准备一个FastReport报表

使用安装时我们的设计工具设计一张最简单的报表

设计的报表,只有一个文字框

将这份报表保存到工程文件/bin/Debug/Report下

2、引入Preview控件

我们在PreviewForm中,将PreviewControl控件拖入窗体,将窗体拉大一点,然后将控件的Dock设为Fill

然后我们F5测试一下看看是什么效果

我们发现控件被正确的显示出来了

那怎么才能看到我们报表呢,我们需要用代码来加载,我们双击Form,新建Load函数,打下面的代码

using FastReport;//引入FastReport
using System;
using System.Windows.Forms;

namespace ReportDemo
{
    public partial class PreviewForm : Form
    {
        private Report pReport; //新建一个私有变量

        public PreviewForm()
        {
            InitializeComponent();
        }

        private void PreviewForm_Load(object sender, EventArgs e)
        {
            pReport = new Report();   //实例化一个Report报表
            String reportFile = "Report/report.frx";
            pReport.Load(reportFile);  //载入报表文件
            pReport.Preview = previewControl1; //设置报表的Preview控件(这里的previewControl1就是我们之前拖进去的那个)
            pReport.Prepare();   //准备
            pReport.ShowPrepared();  //显示
        }
    }
}

我们再F5一下,载入了报表文件的样子

这里我们已经可以预览我们的报表了 但是在我们的需求中,用户还需要自定义报表的内容和格式呢,我们下一步就在实现报表设计器

3、引入Design控件

我们像Preview那样把Design控件拖进DesignForm,然后Dock设为Fill

然后我们来写怎么样吧设计器绑定Report文件,双击新建Load函数,引入FastReport,新建一个private变量

using FastReport;
using System;
using System.Windows.Forms;

namespace ReportDemo
{
    public partial class DesignForm : Form
    {
        private Report dReport;

        public DesignForm()
        {
            InitializeComponent();
        }

        private void DesignForm_Load(object sender, EventArgs e)
        {
            dReport = new Report();
            string reportFile = "Report/report.frx";
            dReport.Load(reportFile);
            this.designerControl1.Report = dReport;
            dReport.Prepare();
            dReport.Design();
        }
    }
}

我们F5一下

成功!

3、绑定数据

1、数据库准备

我们使用VisualStudio自带的mdf文件数据库,首先我们在工程中创建一个文件夹APP_DATA,在此文件夹中创建一个mdf文件

然后我们可以在服务器资源管理器中看到我们的数据库

然后我们右键表新建一个表

CREATE TABLE [dbo].[T_students]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [no] NCHAR(50) NULL, 
    [name] NCHAR(50) NULL, 
    [school] NCHAR(50) NULL, 
    [class] NCHAR(50) NULL
)

然后在设计器左上角点击更新按钮,在弹出的窗口中点击更新数据库

更状态全部打钩之后,表就创建好了,我们刷新服务器资源管理器,然后打开表数据,添加一些数据进去

ok我们现在在服务器资源管理器里面选择mdf文件,在属性列表里,找到连接字符串,拷贝一份出来,等会需要用的到

Data Source=(LocalDB)\v11.0;AttachDbFilename="D:\Personal\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WindowsFormsApplication3\APP_DATA\Database1.mdf";Integrated Security=True

2、设计器数据获取

我们在DesignForm.cs里,写一个方法getData()

private DataSet getData()
{
    String connStr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\Personal\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WindowsFormsApplication3\APP_DATA\Database1.mdf;Integrated Security=True";
    SqlConnection conn = new SqlConnection(connStr);
    conn.Open();
    String sqlStr = "SELECT * FROM T_students";
    SqlCommand comm = new SqlCommand();
    comm.CommandText = sqlStr;
    comm.CommandType = CommandType.Text;
    comm.Connection = conn;
    DataSet ds = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter(comm);
    adapter.Fill(ds, "学生信息");
    conn.Close();
    return ds;
}

然后我们在Form_Load方法里绑定数据集

private void DesignForm_Load(object sender, EventArgs e)
{
    dReport = new Report();
    string reportFile = "Report/report.frx";
    dReport.Load(reportFile);
    this.designerControl1.Report = dReport;

    DataSet ds = new DataSet();
    ds = getData();
    dReport.RegisterData(ds, "学生信息");
    dReport.Prepare();
    dReport.Design();
}

我们F5一下,在设计窗口下,在[数据]->[选择数据源]中,就能看到我们绑定的数据了

我们设计一个表格,把我们的数据放进去

我们可以预览一下,然后保存

3、为Preview绑定数据

现在我们用同样的方法为Preview绑定数据,getData()方法一致,可以直接复制过来

private void PreviewForm_Load(object sender, EventArgs e)
{
    pReport = new Report();   //实例化一个Report报表
    String reportFile = "Report/report.frx";
    pReport.Load(reportFile);  //载入报表文件
    pReport.Preview = previewControl1; //设置报表的Preview控件(这里的previewControl1就是我们之前拖进去的那个)
    DataSet ds = new DataSet();
    ds = getData();
    pReport.RegisterData(ds, "学生信息");
    pReport.Prepare();   //准备
    pReport.ShowPrepared();  //显示
}

我们测试一下

二、用户自定义报表,可保存到服务器和打开。

摘自官方Demo:

调用设计器界面

首页代码

public partial class Form1 : Form
{
    private DataSet FReportsDs;

    private DataTable ReportsTable
    {
        get { return FReportsDs.Tables[0]; }
    }

    public Form1()
    {
        InitializeComponent();
    }

    private void InitializeDatabase()
    {
        FReportsDs = new DataSet();
        FReportsDs.ReadXml(Config.ApplicationFolder + @"..\..\database.xml");
    }

    private void FinalizeDatabase()
    {
        FReportsDs.WriteXml(Config.ApplicationFolder + @"..\..\database.xml", XmlWriteMode.WriteSchema);
    }

    private void WireupDesignerEvents()
    {
        Config.DesignerSettings.CustomOpenDialog += new OpenSaveDialogEventHandler(DesignerSettings_CustomOpenDialog);
        Config.DesignerSettings.CustomOpenReport += new OpenSaveReportEventHandler(DesignerSettings_CustomOpenReport);
        Config.DesignerSettings.CustomSaveDialog += new OpenSaveDialogEventHandler(DesignerSettings_CustomSaveDialog);
        Config.DesignerSettings.CustomSaveReport += new OpenSaveReportEventHandler(DesignerSettings_CustomSaveReport);
    }

    private void DesignReport()
    {
        using (Report report = new Report())
        {
            report.LoadBaseReport += new CustomLoadEventHandler(report_LoadBaseReport);
            report.Design();
        }
    }

    // this event is fired when loading a base part of an inherited report.
    private void report_LoadBaseReport(object sender, CustomLoadEventArgs e)
    {
        OpenReport(e.Report, e.FileName);
    }

    // this event is fired when the user press the "Open file" button
    private void DesignerSettings_CustomOpenDialog(object sender, OpenSaveDialogEventArgs e)
    {
        using (OpenDialogForm form = new OpenDialogForm())
        {
            // pass the reports table to display a list of reports
            form.ReportsTable = ReportsTable;

            // show dialog
            e.Cancel = form.ShowDialog() != DialogResult.OK;

            // return the selected report in the e.FileName
            e.FileName = form.ReportName;
        }
    }

    // this event is fired when report needs to be loaded
    private void DesignerSettings_CustomOpenReport(object sender, OpenSaveReportEventArgs e)
    {
        OpenReport(e.Report, e.FileName);
    }

    // this event is fired when the user press the "Save file" button to save untitled report,
    // or "Save file as" button
    private void DesignerSettings_CustomSaveDialog(object sender, OpenSaveDialogEventArgs e)
    {
        using (SaveDialogForm form = new SaveDialogForm())
        {
            // show dialog
            e.Cancel = form.ShowDialog() != DialogResult.OK;

            // return the report name in the e.FileName
            e.FileName = form.ReportName;
        }
    }

    // this event is fired when report needs to be saved
    private void DesignerSettings_CustomSaveReport(object sender, OpenSaveReportEventArgs e)
    {
        SaveReport(e.Report, e.FileName);
    }

    private void OpenReport(Report report, string reportName)
    {
        // find the datarow with specified ReportName
        foreach (DataRow row in ReportsTable.Rows)
        {
            if ((string)row["ReportName"] == reportName)
            {
                // load the report from a stream contained in the "ReportStream" datacolumn
                byte[] reportBytes = (byte[])row["ReportStream"];
                using (MemoryStream stream = new MemoryStream(reportBytes))
                {
                    report.Load(stream);
                }
                return;
            }
        }
    }

    private void SaveReport(Report report, string reportName)
    {
        // find the datarow with specified ReportName
        DataRow reportRow = null;

        foreach (DataRow row in ReportsTable.Rows)
        {
            if ((string)row["ReportName"] == reportName)
            {
                reportRow = row;
                break;
            }
        }

        // no existing row found, append new one
        if (reportRow == null)
        {
            reportRow = ReportsTable.NewRow();
            ReportsTable.Rows.Add(reportRow);
        }

        // save the report to a stream, then put byte[] array to the datarow
        using (MemoryStream stream = new MemoryStream())
        {
            report.Save(stream);

            reportRow["ReportName"] = reportName;
            reportRow["ReportStream"] = stream.ToArray();
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        InitializeDatabase();
        WireupDesignerEvents();
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        FinalizeDatabase();
    }

    private void btnDesign_Click(object sender, EventArgs e)
    {
        DesignReport();
    }
}

打开对话框:

public partial class OpenDialogForm : Form
{
    public DataTable ReportsTable
    {
        set
        {
            // fill the listbox with names of reports
            foreach (DataRow row in value.Rows)
            {
                lbxReports.Items.Add(row["ReportName"]);
            }
        }
    }

    public string ReportName
    {
        get
        {
            return (string)lbxReports.SelectedItem;
        }
    }

    public OpenDialogForm()
    {
        InitializeComponent();
    }

    private void lbxReports_SelectedIndexChanged(object sender, EventArgs e)
    {
        btnOK.Enabled = !String.IsNullOrEmpty(ReportName);
    }
}

保存对话框

public partial class SaveDialogForm : Form
{
    public string ReportName
    {
        get
        {
            return tbReportName.Text;
        }
    }

    public SaveDialogForm()
    {
        InitializeComponent();
    }

    private void tbReportName_TextChanged(object sender, EventArgs e)
    {
        btnOK.Enabled = !String.IsNullOrEmpty(ReportName);
    }
}

参考:使用report.ReportResourceString在数据库中保存FastReport.Net报表

https://www.jb51.net/article/250713.htm

控件下载

点此下载

到此这篇关于Winform项目中使用FastReport.Net报表控件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Winform项目中使用FastReport.Net报表控件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

winform列表控件怎么使用

WinForm中的列表控件可以使用ListBox、ListView和DataGridView三种控件来实现。1. ListBox控件:ListBox控件是一种简单的列表控件,用于显示一列项。可以通过以下步骤来使用ListBox控件:- 在窗
2023-09-05

Winform项目中TextBox控件的DataBindings属性怎么用

本篇内容介绍了“Winform项目中TextBox控件的DataBindings属性怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Da
2023-06-29

WinForm之中BindingNavigator控件的使用

BindingNavigator控件是WinForm中的一个导航控件,用于在数据绑定的情况下提供导航和操作数据的功能。它通常与DataGridView或其他数据绑定控件一起使用。使用BindingNavigator控件,可以轻松地在数据集中
2023-09-02

C#中如何把FastReport.Net报表控件的数据保存到数据库

这篇“C#中如何把FastReport.Net报表控件的数据保存到数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中
2023-07-02

C#中winform chart控件怎么使用

在C#中使用WinForms Chart控件,可以按照以下步骤进行操作:在Visual Studio中创建一个WinForms应用程序项目。在设计视图中,从工具箱中拖拽一个Chart控件到窗体上。在窗体的代码文件中,添加对System.
C#中winform chart控件怎么使用
2024-02-29

WinForm中怎么使用状态栏控件

要在WinForm中使用状态栏控件,您可以按照以下步骤操作:在Visual Studio中打开您的WinForm项目。在工具箱中找到状态栏控件(StatusBar),将其拖放到您的窗体上。在状态栏控件中添加所需的状态栏面板(Status
WinForm中怎么使用状态栏控件
2024-03-12

WinForm中怎么使用定时器控件

在WinForm中使用定时器控件非常简单。下面是使用定时器控件的步骤:在WinForm的工具箱中找到定时器控件(Timer),将其拖放到窗体上。设置定时器控件的属性,比如Interval(定时器触发事件的时间间隔,单位为毫秒)。双击定时
WinForm中怎么使用定时器控件
2024-03-12

DataGridView控件怎么在C#项目中使用

DataGridView控件怎么在C#项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1) 创建课程信息表创建课程信息表的 SQL 语句如下。use t
2023-06-08

Log4net在.Net Winform项目中的使用实例详解

Log4net是一款开源的.NET日志记录库,用于记录应用程序的事件和错误信息。在Winform项目中使用Log4net分六步:引入Log4net库创建日志记录器配置日志记录记录日志消息查看日志输出探索其他设置(过滤器、滚动策略、异步记录等)Log4net提供了丰富的配置选项,可根据需要轻松定制日志记录行为。
Log4net在.Net Winform项目中的使用实例详解
2024-04-02

WinForm中怎么使用打印对话框控件

要在WinForm中使用打印对话框控件,可以按照以下步骤进行:在Visual Studio中打开你的WinForm应用程序项目。在窗体上放置一个按钮控件,用于触发打印对话框。双击按钮控件,打开按钮的点击事件处理程序。在按钮的点击事件处
WinForm中怎么使用打印对话框控件
2024-03-12

ListView列表组件如何在Android项目中使用

ListView列表组件如何在Android项目中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ListView是一种非常常见的一个组件,以垂直列表的形式显示列表项。而
2023-05-31

在EasyUI项目中使用FileBox控件实现文件上传处理

在EasyUI项目中使用FileBox控件实现文件上传处理,可以按照以下步骤进行操作:1. 引入EasyUI的相关文件,包括easyui.css、easyui.js和jquery.js。2. 在HTML页面中添加一个FileBox控件,并设
2023-09-02

VB.NET如何使用水晶报表控件

这篇文章给大家分享的是有关VB.NET如何使用水晶报表控件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Crystal Reporter(水晶报表)做为一个优秀的报表软件,水晶报表是实际应用中最多的方案。在这一节
2023-06-17

报表模板—在项目管理中应用数据报表分析

项目管理是在项目活动中运用专门的知识、技能、工具和方法,使项目能在有限资源下,实现或超过设定的需求和期望的过程,是对成功地达成一系列目标相关的活动的整体监测和管控。无论是在大型工程、软件开发、系统制造之类的项目管理中运用报表数据分析的方法及
2023-06-05

vue项目中使用require.context引入组件

本文主要介绍了vue项目中使用require.context引入组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录