java使用fast报表控件_FastReport报表控件的使用

本文介绍了如何在Java项目中使用FastReport控件进行报表设计和打印预览。首先从官网下载并安装FastReport,然后通过DesignerControl创建和设置报表,接着在代码中加载和注册数据源,预览报表。FastReport提供了丰富的模板和样式设计,通过保存和加载模板功能,简化了报表操作。文章最后给出了加载和保存模板的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次的项目由于涉及到了打印输出,这样也就不得不要涉及一些打印预览功能,本来可以使用Crystal Report,但又通过别人介绍发现了一款制作更加精美,而且实用的FastReport控件,下面把项目中的小应用说道说道。

首先,从官方网站可以下载到FastReport最新版本,安装时注意勾选"将FastReport控件添加到Visual Studio工具箱",安装完成后就可以看到控件列表了:

8f759d5427792a703da92f4310d0e715.png

一、EnvironmentSettings的使用

EnvironmentSettings顾名思义是环境设置,这里可以对其他的几个控件进行样式上的设置,不过个人感觉没啥必要了,因为原本的样式已经足够完美,所以这个直接Pass

79858d38d6994f74a2f9ad3380b5df99.png

二、DesignerControl的使用

DesignerControl是FastReport的主设计界面,拖动控件进入窗体,可以看到基本的效果:

baaa72182bb813654a143d1afc053a3d.png

要让工作区能够正常使用,只需在窗体的Load事件中加入以下代码:

961ddebeb323a10fe0623af514929fc1.png代码

1 //加载时新建一个报表,把他附加到设计器上

2

3 Report report = new Report();

4 designerControl1.Report = report;

5

6 这时打开窗口,可以清晰的看到FastReport的工作区

7 了,但同时还有个问题,就是在视图里面点击数据源、

8 属性等看不到相应的窗口,这时再加一句代码刷新

9 FastReport的工具箱和工具窗口的布局

10

11 designerControl1.RefreshLayout();

12

三、Report的使用

PreviewControl就是预览数据显示效果的控件,不过一般不需要在窗体中拖拽使用,数据的预览需要FastReport的模板支持,FastReport中自带的模板默认都是以Northwind数据库的Employees表作为数据源的,这自然满足不了现实的需求,所以这里需要自己制作相应的模板, 首先进入数据菜单,选择添加数据源,加入自己需要显示的数据表,随后将其拖拽至设计界面的数据区,以常见的学生表为例,设计界面下的效果大致如下:

1bd87d4c8b5a2a7f4d364b4719c4f643.png

随后可以点击Ctrl+P预览,软件还自带了很多设计的样式,诸如模糊、滤镜、条纹、背景等等,仔细设计一下效果肯定会更好。。。。

将模板保存回到窗体中,后台中编写如下代码:

961ddebeb323a10fe0623af514929fc1.png代码

public Form1()

{

InitializeComponent();

InitialData();

}

private DataSet ds = null;

private void InitialData()

{

SqlConnection con = new SqlConnection("server=.;database=XXX;uid=sa;");

SqlDataAdapter adapter = new SqlDataAdapter("select * from Student", con);

ds = new DataSet();

adapter.Fill(ds);

}

private void button1_Click(object sender, EventArgs e)

{

//加载模板

report1.Load(@"http://www.cnblogs.com/myx.frx");

//加载数据

report1.RegisterData(ds);

//这样就可以预览数据了

report1.Show();

//释放资源

report1.Dispose();

}

使用还是比较方便。。。。不过每次都要这样加载,貌似有些麻烦,我们可以将他以流的形式存储在一个XML文件中,从而方便访问。

主设计器的代码如下:

961ddebeb323a10fe0623af514929fc1.png代码

private void Form1_Load(object sender, EventArgs e)

{

//加载工作区

Report report = new Report();

designerControl1.Report = report;

designerControl1.RefreshLayout();

//更改设计器的选择文件对话框和打开报表对话框

Config.DesignerSettings.CustomOpenDialog += new FastReport.Design.

OpenSaveDialogEventHandler

(DesignerSettings_CustomOpenDialog);

Config.DesignerSettings.CustomOpenReport +=

new FastReport.Design.

OpenSaveReportEventHandler(DesignerSettings_CustomOpenReport);

//更改设计器的保存文件对话框和保存报表对话框

Config.DesignerSettings.CustomSaveDialog += new FastReport.Design..

OpenSaveDialogEventHandler

(DesignerSettings_CustomSaveDialog);

Config.DesignerSettings.CustomSaveReport += new FastReport.Design.

OpenSaveReportEventHandler(DesignerSettings_CustomSaveReport);

//得到当前模板信息

GetRptTemplate();

}

//设置数据集

private DataSet ds;

private DataTable ReportTable

{

get

{

return this.ds.Tables[0];

}

}

void DesignerSettings_CustomOpenDialog(object sender, FastReport.Design.

OpenSaveDialogEventArgs e)

{

using (OpenForm openForm = new OpenForm())

{

//加载模板名

openForm.ReportTable = ReportTable;

//显示窗体

DialogResult dr = openForm.ShowDialog();

if (dr == DialogResult.OK)

{

//获取打开窗体选择的模板名

e.FileName = openForm.SelectedReportName;

}

}

}

void DesignerSettings_CustomOpenReport(object sender, FastReport.Design.

OpenSaveReportEventArgs e)

{

//打开模板

OpenReportTemplate(e.Report, e.FileName);

}

void DesignerSettings_CustomSaveDialog(object sender, FastReport.Design.

OpenSaveDialogEventArgs e)

{

using (SaveForm saveForm = new SaveForm())

{

//取得SaveForm保存的模板名

e.FileName = saveForm.ReportName;

}

}

void DesignerSettings_CustomSaveReport(object sender, FastReport.Design.

OpenSaveReportEventArgs e)

{

//保存模板

SaveReportTemplate(e.Report, e.FileName);

}

//读取报表模板信息

private void GetRptTemplate()

{

ds = new DataSet();

ds.ReadXml(Application.StartupPath + "\\database.xml");

}

//写入报表模板信息

private void WriteRptTemplate()

{

ds.WriteXml(Application.StartupPath + "\\database.xml",

XmlWriteMode.WriteSchema);

}

//打开报表模板

private void OpenReportTemplate(Report report,

string reportName)

{

foreach (DataRow dr in ReportTable.Rows)

{

if (dr["ReportName"].ToString() == reportName)

{

//读取模板信息,注意读取的是ReportStream,而不是ReportName

byte[] reportBytes = (byte[])dr["ReportStream"];

using (MemoryStream stream = new MemoryStream(reportBytes))

{

//加载报表

report.Load(stream);

}

return;

}

}

}

//保存报表模板

private void SaveReportTemplate(Report report, string reportName)

{

//如果现在有同名模板,则提示需要更换保存的模板名字

foreach (DataRow dr in ReportTable.Rows)

{

if (dr["ReportName"].ToString() == reportName)

{

MessageBox.Show("现在有同名模板,请更换保

存模板名后重试!", "系统提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);

return;

}

}

//没有检测到同名模板,则向报表数据集中增加一个新行

DataRow newRow = ReportTable.NewRow();

ReportTable.Rows.Add(newRow);

using (MemoryStream stream = new MemoryStream())

{

report.Save(stream);

//写入xml配置文件

newRow["ReportName"] = reportName;

newRow["ReportStream"] = stream.ToArray();

}

}

打开和保存模板的代码见DEMO,其实这些代码参照示例写出来的,大家可以去仔细研究下安装目录下的所有示例,俺这里还是要切合这个系列的主题嘛,做事有时还是要就事论事的,有时没有必要完全搞定所有的功能,先把需要实现的实现了再说^_^

俺的DEMO: 下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值