1、FastReport的簡介html
FastReport是功能齊全的報表控件,使開發者能夠快速並高效地爲·NET/VCL/COM/ActiveX應用程序添加報表支持。sql
2、FastReport的安裝(推薦網址:https://www.cnblogs.com/yoyo-524/p/6116884.html)數據庫
感受寫的安裝步驟很詳細了,在這就不贅述了。另外提一個小問題,就是按照步驟咱們安裝好的是英文,怎麼轉成中文呢?this
你們不用再去網上找中文破解包之類的,直接在菜單裏找到「File」——>「Select Language」,而後選擇咱們須要的中文簡體就OK了。url
3、在Winform中使用FastReportspa
一、新建一個窗體,給窗體拖入.net
這個控件,3d
而後設置屬性,最終成這樣code
二、新建一個frx報表,打開咱們新安裝的,打開以後選擇「文件」——>「新建」,選擇空報表。orm
而後給空報表選擇數據源,若是不選則會報這個錯
菜單「數據」——>「添加數據源」,而後就是一系列的選擇數據庫,寫用戶名,密碼這類的,填寫好後點擊「下一個」,而後出現這個頁面。
我須要的數據是用紫紅色標出來的那四個字段,這裏須要注意那個紅色圈出的按鈕「添加SQL查詢...」(注:若是你須要的只是一個表裏的所有或部分數據,那麼直接點「完成」便可)
【這裏修改一下哈,能夠不勾選表裏面的字段,而後直接點擊「添加sql查詢...」按鈕的,這樣在下面的數據源裏就不會出現UserInfo和Dept這兩個表了,直接一個Table就OK了】
點擊這個按鈕,而後「下一個」到這個頁面
而後一直點擊「下一個」直到完成。
而後就會發現報表右側的數據源裏多了個Table
而後將Table裏面的字段直接拖入報表你想要顯示數據的位置便可。
這個數據區顯示的數據源,決定你報表顯示的數據。這就是爲何非要把兩個表裏的字段整合到一個表中的緣由。(有興趣的本身試試,選擇不一樣的數據區,導出的數據有什麼區別)
【其實這個時候,你點擊報表中的預覽按鈕已經可以顯示出裏面的數據了,固然,參數time的值除外。因此到這裏我就迷惑了,都已經把數據源搞定了,我在代碼裏還折騰啥呢?可是一旦在報表中不給數據源,那裏面的字段怎麼拖進去?後續應該怎麼作?這個有知道的但願可以留言解惑,拜託啦~】
報表模板就算作完了,而後保存,本身選個路徑。而後我是又把它複製到了Reports這個文件夾裏。在VS中打開frx報表,會以xml文件的形式打開。若是想要再次修改報表模板,能夠選中
報表,右鍵選擇打開方式,找到就OK了。還有一點須要注意,就是報表放進文件夾後須要右鍵屬性,而後在「複製到輸出目錄中」必定要選成「始終複製」。
,要否則編譯
report.Load(filename);//找不到文件,報錯
的時候在bin\Debug\...文件目錄下找不到報表文件,會報錯。
三、代碼,這裏給報表附數據源,datatable和dataset均可以。
private void FormFR_Load(object sender, EventArgs e) { DataSet data = null; string conStr = "Server='127.0.0.1';database=demo;UID='sa';PWD='wsn******';"; try { SqlConnection con = new SqlConnection(conStr); con.Open(); string sql = @"select Dept.DeptID,Dept.DeptName,UserInfo.UserName,UserInfo.Salary from
dbo.Dept left join dbo.UserInfo on Dept.ID=UserInfo.DeptID"; SqlCommand sqlcmd = new SqlCommand(sql, con); SqlDataAdapter sda = new SqlDataAdapter(sqlcmd); data = new DataSet(); sda.Fill(data); con.Close(); sda.Dispose(); } catch (Exception err) { MessageBox.Show(err.StackTrace); } try { FastReport.Report report = new FastReport.Report(); string filename = @"Reports\fr一覽.frx"; report.Load(filename); report.Preview = this.previewControl1;//讓報表顯示在窗體的控件中
report.RegisterData(data); report.SetParameterValue("time", DateTime.Now.Date.ToString("yyyy-MM-dd"));//報表裏的參數賦值 report.Prepare(); report.ShowPrepared(); } catch (Exception err) { MessageBox.Show(err.Message); } }
最後報表顯示的數據(由於頁面太大,不能把前邊的數據和操做時間截在一塊兒,只能兩張圖了):