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

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

本文介绍了在Winform项目中使用FastReport.Net报表控件的方法,并通过示例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

目录

一、基本使用1。准备项目和导入控制1。下载并安装Fastport 2。准备项目。进口管制3。开始页面设计2。使用控件构建表单1。准备Fastport报告2。导入预览控件3。导入设计控制3。绑定数据1。准备数据库2。获取设计者数据3。为预览2绑定数据。用户定义的。控制下载

一、基本使用

1、准备工程和引入控件

1、下载、安装FastReport

这一步很简单。你可以从它的中文网站下载最新版本的demo,然后直接安装。

打破文件:

替换C:WindowsMicrosoft。NET assembly GAC _ MSIL fast report v 4.0 _ 2019 . 1 . 5 . 0 _ _ 00000000000000000 fast report . dll带破解的一个。

文件夹框架X.0中的程序集被PublicKeyToken移除,强名称验证被禁用。

安装后你会发现VS里什么都没有,不像有些插件会直接显示在工具箱里,需要我们自己去介绍。

2、准备工程、引入控件

首先,我们使用VS创建一个新的WinForm项目。这里我用的是VisualStutio2015版本。

然后我们先介绍一下FastReport的核心dll依赖。这些文件的目录是FastReport安装目录下的FastReport、fastreport.editor.dll、fastreport.bars.dll。

可以在Framework 4.0下使用dll文件。

然后我们需要三个表单:MainForm、DesignForm和PreviewForm,其中MainForm是启动页面。

现在我们需要将我们需要的FastReport控件引入工具箱。首先,我们在工具箱中创建一个新项目,并将其命名为FastReport。

然后,右键单击新创建的选项卡-选择项目以打开用于选择控件的对话框。

然后我们点击左下角的浏览,选择刚才的FastReport.dll,然后确认,再确认,下面的新控件就导入成功了。

3、启动页设计

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

事件

私有void btnDesign_Click(对象发送方,EventArgs e)

{

design form d form=new design form();

dForm。show();

}

私有void btnPreview_Click(对象发送方,EventArgs e)

{

preview form p form=new preview form();

pForm。show();

}

2、使用控件搭建窗体

1、准备一个FastReport报表

使用我们的设计工具在安装过程中设计最简单的报告。

该报表设计为只有一个文本框。

将此报告保存到项目文件/bin/Debug/Report中。

2、引入Preview控件

在PreviewForm中,我们将PreviewControl拖动到表单中,将表单放大一点,然后将控件的Dock设置为Fill。

那我们F5测试一下,看看是什么效果。

我们发现控件显示正确。

我们怎样才能看到我们的报告?我们需要使用代码来加载它。我们双击Form,创建一个新的load函数,并键入以下代码。

使用FastReport//介绍FastReport

使用系统;

使用系统。Windows . Forms

命名空间报告演示

{

公共分部类预览表单:表单

{

私人报告预报告;//创建新的私有变量

公共预览表单()

{

initialize component();

}

private void PreviewForm_Load(对象发送方,EventArgs e)

{

pReport=new Report();//实例化报表Report

string Report file= Report/Report . frx ;

预端口。load(report file);//加载报告文件

预端口。Preview=previewControl1//设置报表的预览控件(这里的previewControl1就是我们之前拖入的那个)

预端口。prepare();//准备

预端口。show prepared();//显示

}

}

}

让我们再次按F5并加载报告文件。

我们可以在这里预览我们的报告,但是在我们的需求中,用户需要定制报告的内容和格式。我们的下一步是实现报告设计器。

3、引入Design控件

我们像试映那样把设计控件拖进设计表单,然后码头设为充满

然后我们来写怎么样吧设计器绑定报告文件,双击新建负荷函数,引入快速报告,新建一个私人的变量

使用快速报告

使用系统;

使用系统窗户。形式

命名空间报告演示

{

公共分部类设计表单:表单

{

私人报告德雷波特

公共设计表单()

{

初始化组件();

}

私有void DesignForm_Load(对象发送方,EventArgs e)

{

dReport=new Report();

字符串报告文件= Report/Report。frx ;

德雷波特加载(报表文件);

这个。设计器控件1。报表=d报表;

德雷波特. prepare();

德雷波特. design();

}

}

}

我们F5一下

成功!

3、绑定数据

1、数据库准备

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

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

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

创建表[dbo].[T _学生]

[Id] INT不为空主键标识,

[否] NCHAR(50)空,

[姓名] NCHAR(50) NULL,

[学校] NCHAR(50) NULL,

NCHAR(50)空

)

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

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

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

数据源=(本地数据库) v 11.0AttachDbFilename= D: Personal Documents Visual Studio 2012 Projects windows窗体应用程序3 windows窗体应用程序3 APP _ DATA database 1。MDF ;集成安全性=真

2、设计器数据获取

我们在设计表单。铯里,写一个方法getData()

私有数据集getData()

{

字符串连接字符串=@ 数据源=(本地数据库) v 11.0AttachDbFilename=D: Personal Documents Visual Studio 2012 Projects windows窗体应用程序3 windows窗体应用程序3 APP _ DATA database 1。中纤板;集成安全性=True ;

SqlConnection conn=new SqlConnection(connStr);

conn . Open();

string sqlStr= SELECT * FROM T _ students ;

SqlCommand comm=new SqlCommand();

comm . CommandText=sqlStr

comm.CommandType=CommandType .文本;

通信连接=连接;

数据集ds=新数据集();

sqldata adapter适配器=新的sqldata适配器(comm);

适配器。填充(ds,学生信息);

conn . Close();

返回ds;

}

然后我们在表单_加载方法里绑定数据集

私有void DesignForm_Load(对象发送方,EventArgs e)

{

dReport=new Report();

字符串报告文件= Report/Report。frx ;

德雷波特加载(报表文件);

这个。设计器控件1。报表=d报表;

数据集ds=新数据集();

ds=get data();

德雷波特。注册数据(ds,学生信息);

德雷波特. prepare();

德雷波特. design();

}

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

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

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

3、为Preview绑定数据

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

私有void PreviewForm_Load(对象发送方,EventArgs e)

{

pReport=new Report();//实例化一个报告报表

字符串报告文件= Report/Report。frx ;

预端口加载(报表文件);//载入报表文件

预端口Preview=previewControl1//设置报表的试映控件(这里的预览控件一就是我们之前拖进去的那个)

数据集ds=新数据集();

ds=get data();

预端口。注册数据(ds,学生信息);

预端口. prepare();//准备

预端口show prepared();//显示

}

我们测试一下

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

摘自官方演示:

调用设计器界面

首页代码

公共分部类表单1:表单

{

私有数据集FReportsDs

私有数据表报表表

{

获取{ return FReportsDs .表[0];}

}

公共表单1()

{

初始化组件();

}

私有void初始化数据库()

{

FReportsDs=new DataSet();

报告.ReadXml(配置。应用程序文件夹@ ..数据库。XML’);

}

私有void FinalizeDatabase()

{

报告.WriteXml(配置。应用程序文件夹@ ..database.xml ,XmlWriteMode .写模式);

}

私有void WireupDesignerEvents()

{

配置设计师设置。自定义打开对话框=new OpenSaveDialogEventHandler(设计器设置_自定义打开对话框);

配置设计师设置。自定义打开报表=new OpenSaveReportEventHandler(设计器设置_自定义打开报表);

配置设计师设置。customsavedialogeventhandler(designer settings _ CustomSaveDialog);

配置设计师设置。CustomSaveReport=new OpenSaveReportEventHandler(designer settings _ CustomSaveReport);

}

私有空的设计报告()

{

使用(报告报告=新报告())

{

报告loadbase report=new CustomLoadEventHandler(report _ loadbase report);

报告. design();

}

}

//加载继承报表的基本部分时激发此事件。

私有void report_LoadBaseReport(对象发送方,CustomLoadEventArgs e)

{

OpenReport(电子报告,电子文件名);

}

//当用户按下"打开文件"按钮时触发此事件

私有void designer设置_自定义打开对话框(对象发送方OpenSaveDialogEventArgs e)

{

using(open dialog form form=new open dialog form())

{

//传递报告表以显示报告列表

形式ReportsTable=ReportsTable

//显示对话框

e.取消=形式ShowDialog()!=对话结果.好的;

//在e .文件名中返回选定的报告

e.文件名=格式ReportName

}

}

//需要加载报告时触发此事件

私有void designer设置_自定义打开报表(对象发送方OpenSaveReportEventArgs e)

{

OpenReport(电子报告,电子文件名);

}

//当用户按"保存文件"按钮保存无标题报告时触发此事件,

//或"文件另存为"按钮

私有void设计器设置_ CustomSaveDialog(对象发送方OpenSaveDialogEventArgs e)

{

using(SaveDialogForm form=new SaveDialogForm())

{

//显示对话框

e.取消=形式ShowDialog()!=对话结果.好的;

//在e .文件名中返回报告名称

e.文件名=格式ReportName

}

}

//需要保存报告时触发此事件

私有void设计器设置_ CustomSaveReport(对象发送方OpenSaveReportEventArgs e)

{

保存报告(电子报告,电子文件名);

}

私有void OpenReport(报告报告,字符串报告名称)

{

//查找具有指定ReportName的数据行

foreach(报表表中的数据行行。行)

{

如果(字符串)行[报告名]==报告名)

{

//从"报告流"数据列中包含的流加载报告

byte[]报表字节=(byte[])行[报表流];

使用(内存流stream=新内存流(报告字节))

{

报告。负载(流);

}

返回;

}

}

}

私有作废保存报告(报告报告,字符串报告名称)

{

//查找具有指定ReportName的数据行

DataRow reportRow=null

foreach(报表表中的数据行行。行)

{

如果(字符串)行[报告名]==报告名)

{

reportRow=row

打破;

}

}

//找不到现有行,追加新行

if (reportRow==null)

{

reportRow=ReportsTable .NewRow();

报告表格100行。add(reportRow);

}

//将报告保存到流中,然后将字节[]数组放入数据行中

使用(内存流stream=新内存流())

{

报告。保存(流);

报告行[报告名称]=报告名称;

报告行[报告流]=流.to array();

}

}

私有void Form1_Load(对象发送方,EventArgs e)

{

InitializeDatabase();

WireupDesignerEvents();

}

私有void Form1_FormClosed(对象发送方FormClosedEventArgs e)

{

完成数据库();

}

私有void btnDesign_Click(对象发送方,EventArgs e)

{

设计报告();

}

}

打开对话框:

公共分部类OpenDialogForm:表单

{

公共数据表报表

{

设置

{

//用报告的名称填充列表框

foreach(数据行值中的行。行)

{

lbxReports .项目。添加(行[报告名称]);

}

}

}

公共字符串ReportName

{

得到

{

返回(字符串)lbxReports .选择编辑项目;

}

}

公共OpenDialogForm()

{

初始化组件();

}

私有void lbx reports _ selectedindex已更改(对象发送方,EventArgs e)

{

btnOK .启用=!字符串IsNullOrEmpty(报表名称);

}

}

保存对话框

公共分部类SaveDialogForm:表单

{

公共字符串ReportName

{

得到

{

返回tbReportName .文本;

}

}

公共SaveDialogForm()

{

初始化组件();

}

私有void tbReportName _ text已更改(对象发送方,事件参数e)

{

btnOK .启用=!字符串IsNullOrEmpty(报表名称);

}

}

参考:使用报告ReportResourceString在数据库中保存快速报告。网报表

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

控件下载

点此下载

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

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