FastReport.Net是一款功能齐全的报表分析解决方案。
前两年工作的时候就是使用FastReport进行报表设计,只是当时使用的时候都是调用别人写好的帮助类,直接调用即可。当时让人觉得不明觉厉。呵呵..不过现在再次需要使用到FastReport进行报表的设计打印,以及与rdlc报表进行对比的。所以再次仅记一次初步的使用。
一、报表的的设计过程
设计模板----加载数据---调用模板生成报表或者打印。基本上大多数的报表都是如是设计的。模板与数据分离,在调用时再将数据绑定到模板上。
二、FastReport的初步使用
使用FastReport设计器承载模板设计和预览
/// <summary> /// 用fastreport设计器承载模板 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Scan(object sender, EventArgs e) { DataSet ds = GetDataSource(); report.Clear(); ///清空报表,不然在窗体第二调用时会带不出报表信息 if (!File.Exists(frxFile)) { MessageBox.Show("找不到模板:OrderPrint.frx,请先设计模板"); report.RegisterData(ds); //注册数据 report.SetParameterValue("TType", "类型"); //传递参数 for(int i=0;i<ds.Tables.Count;i++) { report.GetDataSource(ds.Tables[i].TableName).Enabled = true; //手动设为true,不然在设计器中看不到数据对象 } report.Design(); //设计 return; } report.Load(frxFile); report.SetParameterValue("TType", "类型"); report.RegisterData(ds); report.Prepare(); report.ShowPrepared(); //预览显示 }
当然有时设计FastReport模板不是简单的设计显示,还需要对其后端进行处理
例如数据区的table显示,则需要报表模板后端进行处理:
private void Table3_ManualBuild(object sender, EventArgs e) { DataSourceBase data1 = Report.GetDataSource("Detail"); // 获取DataSet中表名为Detail的数据源 data1.Init(); // 初始化 Table3.PrintRow(0); // 控件Table1打印第0行 Table3.PrintColumns(); // 每打印一行,都要调用 PrintColumn或PrintColumns while(data1.HasMoreRows) // 打印重复循环的行 { Table3.PrintRow(0); Table3.PrintColumns(); data1.Next(); // 读取下一行 } }
使用FastReport提供的控件进行操作:
在【工具箱】---【添加选项卡】---【选择项】--【选择FastReport.dll】。将FastReport控件显示到工具箱中,如下图所示:
可以通过FastReport提供的控件进行报表的操作。
例如使用PreviewControl进行报表的展示与打印:
private void Print(object sender, EventArgs e) { DataSet ds = GetDataSource(); string tType = "类型"; report.Clear(); /// report.Preview = this.PreviewDetail; if (!File.Exists(frxFile)) { MessageBox.Show("找不到模板:OrderPrint.frx,请先设计模板"); report.RegisterData(ds); report.SetParameterValue("OrderType", orderType); for (int i = 0; i < ds.Tables.Count; i++) { report.GetDataSource(ds.Tables[i].TableName).Enabled = true; } report.Design(); return; } report.Load(frxFile); report.SetParameterValue("OrderType", orderType); report.RegisterData(ds); report.Prepare(); report.ShowPrepared(); PreviewDetail.Print(); //打印 }
显示效果就像rdlc的ReportViewer承载显示rdlc报表一样(就不上图了)。
最后
虽然现在只是非常浅简的使用,个人觉得FastReport.net在设计方面还是由于rdlc的,模板设计相对简单,在程序调用方面也比较优秀。但是FastReport.net是收费的。