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

   感觉自己脑子里只剩下报表了,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 = @"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里添加的需要的字段。所以我们需要在代码里给报表的数据集赋值。

最后结果:

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

 

posted @ 2018-04-27 16:34  闲得无聊敲代码  阅读(1607)  评论(0编辑  收藏  举报