FastReport报表控件的使用

转自小黑的博客数据库

此次的项目因为涉及到了打印输出,这样也就不得不要涉及一些打印预览功能,原本可使用Crystal Report,但又经过别人介绍发现了一款制做更加精美,并且实用的FastReport控件,下面把项目中的小应用说道说道。工具

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

  FastReport报表控件的使用

  

  1、EnvironmentSettings的使用网站

  EnvironmentSettings顾名思义是环境设置,这里能够对其余的几个控件进行样式上的设置,不过我的感受没啥必要了,由于本来的样式已经足够完美,因此这个直接Passui

  FastReport报表控件的使用

  2、DesignerControl的使用this

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

  FastReport报表控件的使用

  

  要让工做区可以正常使用,只需在窗体的Load事件中加入如下代码:   设计

FastReport报表控件的使用代码
1 //加载时新建一个报表,把他附加到设计器上
2  
3 Report report = new Report();
4 designerControl1.Report = report;

6 这时打开窗口,能够清晰的看到FastReport的工做区
7 了,但同时还有个问题,就是在视图里面点击数据源、
8 属性等看不到相应的窗口,这时再加一句代码刷新
9 FastReport的工具箱和工具窗口的布局
10 
11 designerControl1.RefreshLayout();
12  

  3、Report的使用3d

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

  FastReport报表控件的使用

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

  

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

  

FastReport报表控件的使用代码
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文件中,从而方便访问。

  主设计器的代码以下:

  

FastReport报表控件的使用代码
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: 下载

相关文章
相关标签/搜索