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是收費的。