感觉自己脑子里只剩下报表了,o(╥﹏╥)o。因为最近新换了公司,业务上有需要报表打印,水晶报表,快速报表,rdlc报表这三种以后可能都会用到。所以在没了解好业务流程,熟悉代码之前,就是看看这三种报表怎么用,有啥区别呢?ε=(´ο`*)))唉,说实话,不知道有啥区别,因为练习的demo都是比较简单的,所以。。。
我写这个主要是为了记录一下各个报表怎么添加参数啊,添加数据集啊,等等的一些代码,里面会掺一些我个人的浅显的看法【如有不妥,请指出】
一、水晶报表
这次的导出和我上次导出的方式不一样了。额,上次的没写随笔,忘了。这次就把两次的都贴出来吧,做个对比
第一种:直接把表选中作为数据源,然后往报表里面拖入。
代码:
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; }
效果图:
第二种:通过命令,其实也就是写sql语句把要用到的字段筛选出来。
代码:
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语句即可。
#######################################分割线####################################################
二、快速报表
基本上和前一篇写的一样,就不重复了。链接:http://www.cnblogs.com/wsn1203/p/8920507.html
#######################################分割线####################################################
三、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 = @"ReportsReport1.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里添加的需要的字段。所以我们需要在代码里给报表的数据集赋值。
最后结果:
简单的功能这三种都能实现,复杂的是我不能够复杂化。