感受本身腦子裏只剩下報表了,o(╥﹏╥)o。由於最近新換了公司,業務上有須要報表打印,水晶報表,快速報表,rdlc報表這三種之後可能都會用到。因此在沒了解好業務流程,熟悉代碼以前,就是看看這三種報表怎麼用,有啥區別呢?ε=(´ο`*)))唉,說實話,不知道有啥區別,由於練習的demo都是比較簡單的,因此。。。html
我寫這個主要是爲了記錄一下各個報表怎麼添加參數啊,添加數據集啊,等等的一些代碼,裏面會摻一些我我的的淺顯的見解【若有不妥,請指出】sql
1、水晶報表數據庫
此次的導出和我上次導出的方式不同了。額,上次的沒寫隨筆,忘了。此次就把兩次的都貼出來吧,作個對比this
第一種:直接把表選中做爲數據源,而後往報表裏面拖入。spa
代碼:3d
private void Form1_Load(object sender, EventArgs e) { CrystalReport1 crystalReport1 = new CrystalReport1(); crystalReport1.Load(Application.StartupPath + "CrystalReport1.rpt"); crystalReport1.ParameterFields["Title"].CurrentValues.AddValue("水晶報表一"); crystalReportViewer1.ReportSource = crystalReport1; }
效果圖:code
第二種:經過命令,其實也就是寫sql語句把要用到的字段篩選出來。orm
代碼:htm
private void Form1_Load(object sender, EventArgs e) { #region 水晶報表 CrystalReport1 cr = new CrystalReport1(); var title = cr.Section1.ReportObjects["TextTitle"]; if (title.Kind == ReportObjectKind.TextObject) ((TextObject)title).Text = "XX一覽"; cr.ParameterFields["type"].CurrentValues.AddValue("這是水晶報表"); crystalReportViewer1.ReportSource = cr; #endregion }
解釋:看沒看到報表模板裏面有Section1(報表頭),Section2(頁眉),,,這樣的字樣?其實在這個cs文件中有着對Section的定義,咱們也能夠經過這個來獲取報表對象。對象
下面說那個命令是怎麼添加上的。
第一步:
第二步:
第三步:直到出現了「添加命令」,而後單擊">"這個按鈕。
第四步:右邊也出現了「命令」,而後右鍵單擊「命令」,選擇「編輯命令」,在裏面輸入寫好的sql語句便可。
#######################################分割線####################################################
2、快速報表
基本上和前一篇寫的同樣,就不重複了。連接:http://www.cnblogs.com/wsn1203/p/8920507.html
#######################################分割線####################################################
3、RDLC報表
報表模板:
代碼:
private void Form3_Load(object sender, EventArgs e) { DataTable dt = null; string conStr = "Server='127.0.0.1';database=demo;UID='sa';PWD='******';"; 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); dt = new DataTable(); sda.Fill(dt); con.Close(); sda.Dispose(); } catch (Exception err) { MessageBox.Show(err.StackTrace); } try { this.reportViewer1.LocalReport.ReportPath = @"Reports\Report1.rdlc"; ReportParameter rp = new ReportParameter("type", "rdlc報表"); this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp }); this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1",dt)); this.reportViewer1.RefreshReport(); } catch (Exception err) { MessageBox.Show(err.Message); } }
這個rdlc的數據源不是直接從數據庫中選取的,而是先添加的空的數據集,而後往數據集裏拖入的DataTable,往DataTable裏添加的須要的字段。因此咱們須要在代碼裏給報表的數據集賦值。
最後結果:
簡單的功能這三種都能實現,複雜的是我不可以複雜化。