水晶报表,快速报表,rdlc报表

时间:2023-03-08 21:59:01

感觉自己脑子里只剩下报表了,o(╥﹏╥)o。因为最近新换了公司,业务上有需要报表打印,水晶报表,快速报表,rdlc报表这三种以后可能都会用到。所以在没了解好业务流程,熟悉代码之前,就是看看这三种报表怎么用,有啥区别呢?ε=(´ο`*)))唉,说实话,不知道有啥区别,因为练习的demo都是比较简单的,所以。。。

我写这个主要是为了记录一下各个报表怎么添加参数啊,添加数据集啊,等等的一些代码,里面会掺一些我个人的浅显的看法【如有不妥,请指出】

一、水晶报表

这次的导出和我上次导出的方式不一样了。额,上次的没写随笔,忘了。这次就把两次的都贴出来吧,做个对比

第一种:直接把表选中作为数据源,然后往报表里面拖入。

水晶报表,快速报表,rdlc报表

代码:

 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;
}

效果图:

水晶报表,快速报表,rdlc报表

水晶报表,快速报表,rdlc报表

第二种:通过命令,其实也就是写sql语句把要用到的字段筛选出来。

水晶报表,快速报表,rdlc报表

代码:

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(页眉),,,这样的字样?其实在水晶报表,快速报表,rdlc报表这个cs文件中有着对Section的定义,我们也可以通过这个来获取报表对象。

下面说那个命令是怎么添加上的。

第一步:

水晶报表,快速报表,rdlc报表

第二步:

水晶报表,快速报表,rdlc报表

第三步:直到出现了“添加命令”,然后单击">"这个按钮。

水晶报表,快速报表,rdlc报表

第四步:右边也出现了“命令”,然后右键单击“命令”,选择“编辑命令”,在里面输入写好的sql语句即可。

水晶报表,快速报表,rdlc报表

水晶报表,快速报表,rdlc报表

#######################################分割线####################################################

二、快速报表

基本上和前一篇写的一样,就不重复了。链接:http://www.cnblogs.com/wsn1203/p/8920507.html

#######################################分割线####################################################

三、RDLC报表

报表模板:

水晶报表,快速报表,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里添加的需要的字段。所以我们需要在代码里给报表的数据集赋值。

水晶报表,快速报表,rdlc报表

最后结果:

水晶报表,快速报表,rdlc报表

简单的功能这三种都能实现,复杂的是我不能够复杂化。