一、FastReport的簡介
FastReport是功能齊全的報表控件,使開發者可以快速並高效地為·NET/VCL/COM/ActiveX應用程序添加報表支持。
二、FastReport的安裝(推薦網址:https://www.cnblogs.com/yoyo-524/p/6116884.html)
感覺寫的安裝步驟很詳細了,在這就不贅述了。另外提一個小問題,就是按照步驟我們安裝好的是英文,怎么轉成中文呢?
大家不用再去網上找中文破解包之類的,直接在菜單里找到“File”——>“Select Language”,然后選擇我們需要的中文簡體就OK了。
三、在Winform中使用FastReport
1、新建一個窗體,給窗體拖入
這個控件,
然后設置屬性,最終成這樣
2、新建一個frx報表,打開我們新安裝的,打開之后選擇“文件”——>“新建”,選擇空報表。
然后給空報表選擇數據源,如果不選則會報這個錯
菜單“數據”——>“添加數據源”,然后就是一系列的選擇數據庫,寫用戶名,密碼這類的,填寫好后點擊“下一個”,然后出現這個頁面。
我需要的數據是用紫紅色標出來的那四個字段,這里需要注意那個紅色圈出的按鈕“添加SQL查詢...”(注:如果你需要的只是一個表里的全部或部分數據,那么直接點“完成”即可)
【這里修改一下哈,可以不勾選表里面的字段,然后直接點擊“添加sql查詢...”按鈕的,這樣在下面的數據源里就不會出現UserInfo和Dept這兩個表了,直接一個Table就OK了】
點擊這個按鈕,然后“下一個”到這個頁面
然后一直點擊“下一個”直到完成。
然后就會發現報表右側的數據源里多了個Table
然后將Table里面的字段直接拖入報表你想要顯示數據的位置即可。
這個數據區顯示的數據源,決定你報表顯示的數據。這就是為什么非要把兩個表里的字段整合到一個表中的原因。(有興趣的自己試試,選擇不同的數據區,導出的數據有什么區別)
【其實這個時候,你點擊報表中的預覽按鈕已經能夠顯示出里面的數據了,當然,參數time的值除外。所以到這里我就迷惑了,都已經把數據源搞定了,我在代碼里還折騰啥呢?但是一旦在報表中不給數據源,那里面的字段怎么拖進去?后續應該怎么做?這個有知道的希望能夠留言解惑,拜托啦~】
報表模板就算做完了,然后保存,自己選個路徑。然后我是又把它復制到了Reports這個文件夾里。在VS中打開frx報表,會以xml文件的形式打開。如果想要再次修改報表模板,可以選中
報表,右鍵選擇打開方式,找到就OK了。還有一點需要注意,就是報表放進文件夾后需要右鍵屬性,然后在“復制到輸出目錄中”一定要選成“始終復制”。
,要不然編譯
report.Load(filename);//找不到文件,報錯
的時候在bin\Debug\...文件目錄下找不到報表文件,會報錯。
3、代碼,這里給報表附數據源,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); } }
最后報表顯示的數據(因為頁面太大,不能把前邊的數據和操作時間截在一起,只能兩張圖了):