• 给水晶报表传值的两种方式


    在设计水晶报表的过程中,对于传值给水晶报表,发现网上很难找到比较全的资料,所以特对此内容进行一下总结,供大家分享.

        如果没有为水晶报表传值,其显示的结果通常为对应数据库表的所有记录,那么怎样才能让水晶报表只显示用户需要的数据呢?这就是给水晶报表传值的问题.解决这个问题有两种方式:给水晶报表传递查询的值和给水晶报表传递用户查询的结果.

        1、给水晶报表传递查询值
        要实现给水晶报表传递查询值,首先在设计报表时,需要在Parameter Fields中添加参数字段(方法为:在Field Explorer面板中,鼠标在Parameter Fields上游击,选择New,自己取一个名字.比如我们数据库中存在一个'日期'的字段,我们添加一个Month用来查询满足Month的值).然后点击菜单项Crystal Reports->Report->Selection Formula->Record,弹出Formula Workshop对话框,编辑查询语句如:Month({tbl_SellMain.日期})={?Month}.{tbl_SellMain.日期}可以通过连接中双击日期字段得到.这样水晶报表设计就完成了.Main Report Preview可以查看报表的显示结果,根据提示输入Month的值后,可以看到显示结果中只有满足用户输入条件的结果了.

        如果在C#中不添加任何代码,在每次显示报表时,都会提示输入Month的信息,那么怎样在程序中传入Month的值呢?

        在C#中添加如下代码.
        using CrystalDecisions.Shared;
        //指定报表对应的报表文件
                crystalReportViewer1.ReportSource = path; //crystalReportViewer1为添加在窗体中的CrystalReportViewer.

                //给报表传值,获得满足条件的查询结果
                ParameterFields paramFields = crystalReportViewer1.ParameterFieldInfo;
            
                ParameterField paramMonth = paramFields["Month"];

                ParameterValues curValues=paramCompany.CurrentValues;
                ParameterDiscreteValue discreteValue = new ParameterDiscreteValue();
                discreteValue.Value = 5;    //5为用户设置的查询,此处表示查询的月份为5月
                curValues.Add(discreteValue);

                crystalReportViewer1.ParameterFieldInfo = paramFields;
    这样,显示的结果就仅为5月份的数据.

        2、给水晶报表传递用户查询的结果
        给水晶报表传递查询结果的方式比较直观,在报表设计时也只需要设计好要显示的字段即可.其步骤为:通过SqlDataAdapter获得查询数据,然后填充到一个DataTable对象,然后用此对象填充ReportDocument对象,最后将水晶报表的ReportSource指定为此ReportDocument对象.

        在C#中实现的代码为:
        //生成查询语句
                string select="select * from tbl_SellMain where";
                if (txtName.Text.Trim() != "")
                    select += " 公司名称='" + txtName.Text.Trim() + "' and";
                select += " Year(日期)=" + cmbYear.Text + " and";
                select += " Month(日期)=" + cmbMonth.Text;

                SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=GYHR;Integrated Security=True");
                SqlDataAdapter da = new SqlDataAdapter(select, conn);
                DataTable dt=new DataTable();
                da.Fill(dt);

                //这里必须事先申明一个ReportDocument对象   Report,同时加载数据报表   
                ReportDocument rd = new ReportDocument();
                //获取.rpt文件真实路径   
                string path;
                rd.Load(path);
                rd.Database.Tables[0].SetDataSource(dt);   //对应报表设计的第一个数据表
                crystalReportViewer1.ReportSource = rd;
                //crystalReportViewer1.PrintReport();       打印
  • 相关阅读:
    《大话数据结构》最小生成树——Prim算法
    《大话数据结构》图的BFS和DFS
    寒假集训日志(三)——数论
    寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路
    set
    寒假集训日志(一)——图,最短路问题
    经典的图论算法,C++描述
    动态数组
    stack and queue
    最长递增子序列,最长公共子串,最长公共子序列问题,最长公共增长子序列问题
  • 原文地址:https://www.cnblogs.com/studio313/p/1186570.html
Copyright © 2020-2023  润新知