fastreport控件(FastReport报表控件的使用「终于解决」)

发布时间:2025-12-10 19:16:26 浏览次数:9

FastReport报表控件的使用「终于解决」-falsh控件

FastReport报表控件的使用「终于解决」转自小黑的博客这次的项目由于涉及到了打印输出,这样也就不得不要涉及一些打印预览功能,本来可以使用CrystalReport,但又通过别人介绍发现了一款制作更加精美,而且实用的FastReport控件,下面把项目中的小应用说道说道。首先,从官方网站可以下载到FastReport最新版本,安装时注

转自小黑的博客

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

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

  

  

  一、EnvironmentSettings的使用

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

  

  二、DesignerControl的使用

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

  

  

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

代码

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

2

3Report report=newReport();

4designerControl1.Report=report;

5

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

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

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

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

10

11designerControl1.RefreshLayout();

12

  三、Report的使用

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

  

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

  

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

  

代码

publicForm1()

{

InitializeComponent();

InitialData();

}

privateDataSet ds=null;

privatevoidInitialData()

{

SqlConnection con=newSqlConnection(“server=.;database=XXX;uid=sa;”);

SqlDataAdapter adapter=newSqlDataAdapter(“select * from Student”, con);

ds=newDataSet();

adapter.Fill(ds);

}

privatevoidbutton1_Click(objectsender, EventArgs e)

{

//加载模板

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

//加载数据

report1.RegisterData(ds);

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

report1.Show();

//释放资源

report1.Dispose();

}

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

  主设计器的代码如下:

  

代码

privatevoidForm1_Load(objectsender, EventArgs e)

{

//加载工作区

Report report=newReport();

designerControl1.Report=report;

designerControl1.RefreshLayout();

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

Config.DesignerSettings.CustomOpenDialog+=newFastReport.Design.

OpenSaveDialogEventHandler

(DesignerSettings_CustomOpenDialog);

Config.DesignerSettings.CustomOpenReport+=

newFastReport.Design.

OpenSaveReportEventHandler(DesignerSettings_CustomOpenReport);

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

Config.DesignerSettings.CustomSaveDialog+=newFastReport.Design..

OpenSaveDialogEventHandler

(DesignerSettings_CustomSaveDialog);

Config.DesignerSettings.CustomSaveReport+=newFastReport.Design.

OpenSaveReportEventHandler(DesignerSettings_CustomSaveReport);

//得到当前模板信息

GetRptTemplate();

}

//设置数据集

privateDataSet ds;

privateDataTable ReportTable

{

get

{

returnthis.ds.Tables[0];

}

}

voidDesignerSettings_CustomOpenDialog(objectsender, FastReport.Design.

OpenSaveDialogEventArgs e)

{

using(OpenForm openForm=newOpenForm())

{

//加载模板名

openForm.ReportTable=ReportTable;

//显示窗体

DialogResult dr=openForm.ShowDialog();

if(dr==DialogResult.OK)

{

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

e.FileName=openForm.SelectedReportName;

}

}

}

voidDesignerSettings_CustomOpenReport(objectsender, FastReport.Design.

OpenSaveReportEventArgs e)

{

//打开模板

OpenReportTemplate(e.Report, e.FileName);

}

voidDesignerSettings_CustomSaveDialog(objectsender, FastReport.Design.

OpenSaveDialogEventArgs e)

{

using(SaveForm saveForm=newSaveForm())

{

//取得SaveForm保存的模板名

e.FileName=saveForm.ReportName;

}

}

voidDesignerSettings_CustomSaveReport(objectsender, FastReport.Design.

OpenSaveReportEventArgs e)

{

//保存模板

SaveReportTemplate(e.Report, e.FileName);

}

//读取报表模板信息

privatevoidGetRptTemplate()

{

ds=newDataSet();

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

}

//写入报表模板信息

privatevoidWriteRptTemplate()

{

ds.WriteXml(Application.StartupPath+“\\database.xml”,

XmlWriteMode.WriteSchema);

}

//打开报表模板

privatevoidOpenReportTemplate(Report report,

stringreportName)

{

foreach(DataRow drinReportTable.Rows)

{

if(dr[“ReportName”].ToString()==reportName)

{

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

byte[] reportBytes=(byte[])dr[“ReportStream”];

using(MemoryStream stream=newMemoryStream(reportBytes))

{

//加载报表

report.Load(stream);

}

return;

}

}

}

//保存报表模板

privatevoidSaveReportTemplate(Report report,stringreportName)

{

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

foreach(DataRow drinReportTable.Rows)

{

if(dr[“ReportName”].ToString()==reportName)

{

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

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

return;

}

}

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

DataRow newRow=ReportTable.NewRow();

ReportTable.Rows.Add(newRow);

using(MemoryStream stream=newMemoryStream())

{

report.Save(stream);

//写入xml配置文件

newRow[“ReportName”]=reportName;

newRow[“ReportStream”]=stream.ToArray();

}

}

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

  俺的DEMO:下载

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477