zoukankan      html  css  js  c++  java
  • 往水晶报表传递参数

    最近做了个小东西,要用到打印--数据输出,所以想到用水晶报表。
    先说说水晶报表,这个东东,的确是不错。功能很强大,特别是对于输出格式,几乎满足工作中的绝大多数要求。十分灵活好用。具体一些技术性的东西,我就不一一赘述了,有兴趣的可以去找些书去看看。
    我用的是水晶报表10。对于在报表了连接数据库,相对比较简单,就不说了,现在来看看,如何让报表动态地接受参数,然后形成报表文件,这可能在实际工作地很多情况下,都用得到。
    我用到的前台技术是ASP.NET。那么来看看,.NET下关于水晶报表参数的一些API:parameterfields类、parameterfield类、parameterdiscretevalue类、parameterrangevalue类等。关于这些API的一些具体的用法,可以参考MSDN.
    还要注意使用这些类的时候,要加上如下命名空间:
    using CrystalDecisions.CrystalReports .Engine ;
    using CrystalDecisions.Shared ;
    下面来看看具体的代码使用:
     #region--------------向报表传递参数--------------------
        ParameterFields paraFields =new ParameterFields ();
        ParameterField[] paraField=new ParameterField [8];
        ParameterDiscreteValue[] discreteValue=new ParameterDiscreteValue [8];
        ParameterRangeValue rangeValue=new ParameterRangeValue ();
        paraField[0]=new ParameterField ();
        paraField[0].ParameterFieldName ="Name";
        discreteValue[0]=new ParameterDiscreteValue ();
        discreteValue[0].Value =(string)Session["Name"];
        paraField[0].CurrentValues .Add (discreteValue[0]);
        paraField[1]=new ParameterField ();
        paraField[1].Name ="MajorName";
        discreteValue[1]=new ParameterDiscreteValue ();
        discreteValue[1].Value =(string)Session["MajorName"];
        paraField[1].CurrentValues .Add (discreteValue[1] );
        paraField[2]=new ParameterField ();
        paraField[2].Name ="YearName";
        discreteValue[2]=new ParameterDiscreteValue ();
        discreteValue[2].Value =(string)Session["YearName"];
        paraField[2].CurrentValues .Add (discreteValue[2]);
        paraField[3]=new ParameterField ();
        paraField[3].Name ="TuitionPay";
        discreteValue[3]=new ParameterDiscreteValue ();
        discreteValue[3].Value =Convert.ToDecimal (Session["TuitionPay"]);
        paraField[3].CurrentValues .Add (discreteValue[3]);
        paraField[4]=new ParameterField ();
        paraField[4].Name ="TuitionOwed";
        discreteValue[4]=new ParameterDiscreteValue ();
        discreteValue[4].Value =Convert.ToDecimal (Session["TuitionOwed"]);
        paraField[4].CurrentValues .Add (discreteValue[4]);
        paraField[5]=new ParameterField ();
        paraField[5].Name ="Year";
        discreteValue[5]=new ParameterDiscreteValue ();
        discreteValue[5].Value =(string)Session["Year"];
        paraField[5].CurrentValues .Add (discreteValue[5]);
        paraField[6]=new ParameterField ();
        paraField[6].Name ="Month";
        discreteValue[6]=new ParameterDiscreteValue ();
        discreteValue[6].Value =(string)Session["Month"];
        paraField[6].CurrentValues .Add (discreteValue[6]);
        paraField[7]=new ParameterField ();
        paraField[7].Name ="Day";
        discreteValue[7]=new ParameterDiscreteValue ();
        discreteValue[7].Value =(string)Session["Day"];
        paraField[7].CurrentValues .Add (discreteValue[7]);
                   
        foreach(ParameterField pf in paraField)
        {
         paraFields.Add (pf);
        }
        
        ReportDocument rptdoc=new ReportDocument ();
        rptdoc.Load (Server.MapPath ("../agreementTest.rpt"));
        this.CrystalReportViewer1.ReportSource =rptdoc;
        this.CrystalReportViewer1.ParameterFieldInfo =paraFields;
        this.CrystalReportViewer1 .DataBind ();
        //this.CrystalReportViewer1 .RefreshReport ();
        #endregion
    需要说明的是,必须在水晶报表里面先创建这些参数,才可以使用(而且报表里的参数和代码里的参数保持一致)。另外就是在水晶报表10里参数创建的时候,可以选择创建离散值参数(discrete),也可以选择创建连续值参数(range),那么对应的代码中要用不同的类(parameterdiscretevalue和parameterrangevalue)。
  • 相关阅读:
    2012 Multi-University Training Contest 8
    uva 11354最小生成树瓶颈路(lca算法实现)(rmq在多校二中有一道题)
    POJ 3164最小树形图
    uva11865 二分+最小树形图(朱刘算法)
    LA 5717枚举+最小生成树回路性质
    2014/3/9 长沙多校(第二次)
    zoj3759(待解决+算法木有问题+but需要java大数)
    ztr loves lucky numbers--hdu5676(DFS)
    C. Nearest vectors--cf598C(极角排序)
    D. Spongebob and Squares--cf599D(数学)
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/3003648.html
Copyright © 2011-2022 走看看