`

水晶报表参数赋值

阅读更多
// 声明将参数传递给查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();//--离散值
ParameterRangeValue rangeVal = new ParameterRangeValue ();//--区域值
// 假设第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "Jeason";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Hank";
paramField.CurrentValues.Add (discreteVal);

// 将该参数添加到参数字段集合。
paramFields.Add (paramField);

// 假设第二个参数为区域值。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须和报表中的参数相符。
paramField.ParameterFieldName = "客户ID";
// 设置范围的开始值和结束值并将该范围传递给该参数。
rangeVal.StartValue = 10;
rangeVal.EndValue = 50;
paramField.CurrentValues.Add (rangeVal);

// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);

// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;

//整个赋值过程完毕
______________________________________________________________________




一. 把参数完全交过水晶报表

   打开报表文件.rpt,在字段资源管理器里,右击参数-》新建

    在下面的选项属性里可以设置参数的名称,类型,提示文本,是否允许多个值,值范围类型(如果是字符串用离散,日期或数字用范围)

    注意:上面都是比填的,如果参数是用来对应某个字段的,类型必需跟该字段一样。

   在值属性里可以建一个值的列表,点上去,然后点右边的按钮就进入值列表编辑框了;是否提示时仅显示说明;编辑掩码,可以给参数的指定一定的格式;最小长度;最大长度;

   现在你可以给这个报表创建一个查看器jsp,加viewer标签的就行了。

   注意这个jsp的页面编码设置为UTF-8.

二.   参数所需包跟相关对象

     1.  需要的java类和包      

         com.crystaldecisions.sdk.occa.report.data.*

          com.crystaldecisions.reports.sdk.DataDefController

     2.  创建一个存储参数字段的 Fields 对象。 参数对象都是放在这个里面,通过Fields对象可以添加、删除和查找参数对象  

          Fields fields = new Fields();

     3.   ParameterField 参数字段对象。

          ParameterField paramField1 = new ParameterField();

     4. 为想设置的每个参数字段创建一个 Values 对象。Values对象是用来存储ParameterFieldDiscreteValue 对象或 ParameterFieldRangeValue 对象

          Values newVals1 = new Values();

     5. 离散值对象ParameterFieldDiscreteValue 对象

        ParameterFieldDiscreteValue newDiscVal1 = new ParameterFieldDiscreteValue();

        ParameterFieldDiscreteValue[ ] newDiscVals = new ParameterFieldDiscreteValue[ ];

       范围值对象ParameterFieldRangeValue 对象

        ParameterFieldRangeValue newRangeVal1 = new   ParameterFieldRangeValue();

        ParameterFieldRangeValue[ ] newRangeVals = new   ParameterFieldRangeValue[ ];

      他们的大概关系:一个Fields-》多个ParameterField

                                       一个ParameterField-》一个Values

                                      一个Values-》多个ParameterFieldDiscreteValue 或ParameterFieldRangeValue

三.   后台设置参数

      1.  参数的管理都是通过 报表DataDefController 来控制的。

          DataDefController dataDefController = new DataDefController();

          对于主报表 dataDefController = reportClientDoc.getDataDefController();

          对于子报表

          dataDefController = clientDoc.getSubreportController().getSubreport(reportName).getDataDefController();

      2.  参数的设置信息是通过 IDataDefinition 来获取的。

           IDataDefinition dataDefinition = dataDefController.getDataDefinition();   

          如:Fields fields = dataDefController.getDataDefinition().getParameterFields() ;

          而对参数的设置改动是通过 ParameterFieldController 来控制的

           ParameterFieldController   paramfieldcontroller= dataDefController.getParameterFieldController( );

          如: 给主报表参数字段设置单个值

            paramFieldController.setCurrentValue("", "StringParam", new String("Hello"));         //字符串类型
            paramFieldController.setCurrentValue("", "BooleanParam", new Boolean(true));     //布尔类型
            paramFieldController.setCurrentValue("", "CurrencyParam", new Double(123.45));//货币类型
            paramFieldController.setCurrentValue("", "NumberParam", new Integer(123));         //数字类型

           给某个参数字段设置多个离散值

           Object [] multiVals = {"String1", "String2", "String3"};                     //注意要对应参数字段的类型
           paramFieldController.setCurrentValues("", "StringMultiParam", multiVals);

      3.  取得Fields

           Fields fields = dataDefController.getDataDefinition().getParameterFields() ;

       4.  对已经建立的参数字段,通过Fields的在知道名字的情况下通过Find方法取得

       ParameterField paramField = (ParameterField)dataDefController.getDataDefinition().getParameterFields().findField(parameterName, FieldDisplayNameType.fieldName, Locale.getDefault());

         参数字段七个基本类型
        布尔(Boolean) 、货币(Double)、数字(Integer)、字符串(String)、日期、日期时间、时间(Date)

        参数的值必须跟参数的类型符合才行. 

       5.  如果是新建的参数字段,那必需设置参数字段的报表名称设置为与参数关联的报表名称。如果参数字段用于主报表,则使用空白字符串 ("")。使用 setReportName 方法设置报表名称。

          paramField1.setName("Country");             //设置名字

          paramField1.setReportName("");              //如果为 "   "就是用于主报表,如果子报表,要设置字报表名

         如果是已经在rpt中存在的参数,就不用设置名字和报表名称了,也不用添加到Fields中。

          newDiscVal1.setValue("China");               //设置离散值,后面将添加到参数值列表中

          newDiscVal1.setDescription("The country is China.");//这个要不要都没关系

          将参数字段值添加到 Values 集合对象。  

           newVals1.add(newDiscVal1);                //可以添加多个

           为参数字段设置 Values 集合。

           pfield1.setCurrentValues(vals1);

           向 Fields 对象添加每个参数字段。 Fields 对象现在可用于查看器  

           fields.add(pfield1);                   //非新建参数不用

    下面是重点啦。虽然很简单,但是折磨了我三天

     6.  改动查看报表JSP页面的参数字段离散值列表或范围值列表

          先用取得paramField对象,这个前面有说怎么取得,这里不多说了

         要添加的离散值

         ParameterFieldDiscreteValue newDiscValue = new ParameterFieldDiscreteValue();
         newDiscValue.setValue(newValue);

        取得原来的Values集合,在把Values集合克隆到一个新的Values集合。我原来是用paramField.getValues(),不知道是JRC中出错还是什么,这个方法竟然完全没用,paramField.getDefaultValues().才能真正的取得参数对象的Values集合

         Values newVals = (Values)paramField.getDefaultValues().clone(true);

        在原来的离散值中再添加多个离散值

        newVals.add(newDiscValue);

       为参数字段设置新的Values集合。这里原来是用paramField.setCurrentValues(newVals),也是不行,要用下面的   paramField.setDefaultValues(newVals);

        paramField.setDefaultValues(newVals);

7.   禁用用户提示,自动使用设置的参数字段值。这在以下情况中特别有用:所设置的参数字段值对于用户为未知(例如系统生成的参数)。

      通过boolean multiValue = paramField.getAllowMultiValue();判断报表是否允许多值。
   
      不允许多值的情况下:

  clientDoc.getDataDefController().getParameterFieldController().setCurrentValue(reportName, parameterName , newValue);

  如果是用于主报表,reportName为" ",否则为子报表名称。

  允许多值的情况下:

  ①如果不考虑原来的离散值列表

   String[] newValues = new String[]{"China","USA",..........};

  clientDoc.getDataDefController().getParameterFieldController().setCurrentValues(reportName, parameterName ,newValues);

 

  ②在原来离散值列表的基础上添加新的离散值,并设置

       DataDefController dataDefController = null;
       if(reportName.equals(""))
          dataDefController = clientDoc.getDataDefController();
      else
        dataDefController = clientDoc.getSubreportController().getSubreport (reportName).getDataDefController();
 
      ParameterField paramField = (ParameterField)dataDefController.getDataDefinition().getParameterFields().findField(parameterName, FieldDisplayNameType.fieldName, Locale.getDefault());

     ParameterFieldDiscreteValue newDiscValue = new ParameterFieldDiscreteValue();
     newDiscValue.setValue(newValue);

     Values newVals = (Values)paramField.getDefaultValues().clone(true);

     newVals.add(newDiscValue);

     clientDoc.getDataDefController().getParameterFieldController().setCurrentValue(reportName, parameterName ,newVals);

       查看器的设置

        crystalReportPageViewer.setParameterFields(fields);//这个感觉用不用都没关系

        crystalReportPageViewer.setEnableParameterPrompt(false);

       报表的参数设置好后,则调用查看器的刷新方法以应用新的参数。

       if(session.getAttribute("refresh")==null){
            crystalReportPageViewer.refresh();
            session.setAttribute("refresh","true");
      }
     调用 processHttpRequest 方法以在当前的浏览器窗口中启动此查看器。    

     crystalReportPageViewer.processHttpRequest(request, response, getServletConfig().getServletContext(), null);

    注意不要在查看器里面设置刷新按钮,一按就会丢失参数设置。页面编码UTF-8。如果不行就tomcat profect-》reload this context

分享到:
评论

相关推荐

    c#.net 赋值给水晶报表

    本篇文章将详细探讨如何在C#.NET和VB.NET中为水晶报表赋值,以及与之相关的知识点。 1. 水晶报表简介: 水晶报表提供了一个直观的界面,用于设计各种类型的报表,包括表格、图表、文本和图像等。它可以连接到各种...

    从界面向水晶报表赋值的例子

    本教程将详细讲解如何在Winform应用程序中从用户界面向水晶报表赋值的过程,以实现数据的动态展示。 首先,我们需要确保已经安装了水晶报表的SDK,它提供了必要的设计工具和运行时库。在C#环境下,我们可以使用.NET...

    水晶报表传递参数(C#.net)

    总结来说,C#.NET中传递水晶报表参数的过程包括: 1. 创建`ParameterFields`实例。 2. 对于每个报表参数,创建一个`ParameterField`实例,并设置其`ParameterFieldName`。 3. 创建`ParameterDiscreteValue`或`...

    asp.net水晶报表参数字段在代码中赋值的方法

    通过这些示例,可以了解到***中水晶报表参数在代码中赋值的方法,这些技巧对于开发动态报表和实现高度交互的报表应用非常有用。了解如何操作这些参数,可以帮助开发者在用户界面层与报表生成层之间灵活地传递数据,...

    vs2019 CrystalDecisions水晶报表dll文件

    这个DLL文件是开发人员在VS2019中利用水晶报表功能的关键,它提供了一系列API,使得开发者能够通过编程方式与报表进行交互,例如添加数据源、设计报表布局、设置参数等。 1. **水晶报表简介**: 水晶报表是一种...

    C#水晶报表相关操作

    这种模式下,开发者首先加载报表定义文件,然后设置数据源连接信息,并为报表中的参数赋值。在给出的代码中,`ReportDocument`对象被实例化,接着通过`Load()`方法加载`.rpt`文件。之后,使用`SetConnection()`方法...

    Vs2008使用水晶报表例子

    在.NET开发环境中,Visual Studio(Vs2008)是一个常用且强大的集成开发环境,而水晶报表(Crystal Reports)则是其中一种流行的数据可视化工具。这个例子程序是关于如何在Vs2008中利用.NET Framework的功能,结合...

    动态调用水晶报表步骤+源码

    本实例主要讲解的是水晶报表的动态调用过程,包括源码。实例中也添加了参数的传递,可以手动为定义的参数赋值,如有什么问题可以联系我,联系方式,邮箱:yz_wanchaowei@163.com,QQ:403299821

    C#水晶报表项目

    水晶报表(Crystal Reports)则是SAP公司的一款强大的报表设计工具,它能够帮助开发者生成复杂的业务报告,包括数据可视化、自定义布局和交互式功能。本项目是将C#与水晶报表结合,为学习者提供了一个实践平台。 在...

    [水晶报表]创建不受数据库限制的报表 .Net 版本

    此外,更新版本还增加了报表参数的处理和打印时选择打印机的功能。如果在创建报表过程中遇到提示,可能需要取消对数据库文件的引用,然后使用之前创建的XSD文件继续报表创建。 通过这种方式,虽然增加了开发步骤,...

    水晶报表实例水晶报表实例

    根据提供的文件信息,本文将详细解释水晶报表实例的相关知识点,主要围绕标题与描述中的核心概念进行阐述,并结合部分代码内容来展开。 ### 水晶报表简介 水晶报表(Crystal Reports)是一种强大的报表设计工具,...

    水晶报表 控件.rar

    当需要在运行时动态设置报表参数时,可以通过该控件的`ParameterFieldInfo`属性实现。 #### CrystalReportViewer的ParameterFieldInfo属性 - **公共实例属性**:`ParameterFieldInfo`(继承自`...

    水晶报表的操作

    7. **参数设置**:使用 `SetParameterValue` 方法设置报表参数,包括年份、月份和部门名称。 8. **显示报表**:将报表对象赋值给 `reportsViewerItems.ViewerCore.ReportSource` 属性,从而在界面上显示报表。 ####...

    水晶报表的使用

    水晶报表(Crystal Reports)是商业智能领域中一种广泛使用的报表设计和生成工具,它能够从各种数据源(如数据库、Excel、XML等)提取数据,并以丰富的格式展示出来。水晶报表的强大功能使其在企业级应用中非常受...

    【ASP.NET编程知识】ASP.NET中水晶报表的使用方法详解.docx

    水晶报表参数字段在代码中赋值通常涉及以下步骤: 1. 创建报表参数对象。 2. 设置参数值。 3. 调用报表对象的SetParameterValue方法,传入参数名和值。 4. 最后,显示或导出报表。 在VS2010或VS2005中,部署水晶...

    asp.net水晶报表

    接着,我们获取用户在dateTimePicker中选择的日期,并将其转换为水晶报表所需的参数格式。最后,将这些参数设置到报表中,并设置crystalReportViewer1的ReportSource为myReport,以显示报表。 在Form1_Load事件中,...

    .NET 水晶报表使用代码

    水晶报表的强大之处在于它不仅能够展示静态数据,还支持动态参数输入、分组统计等多种高级功能,非常适合开发大型的企业级应用。 #### 六、总结 本文详细介绍了在.NET环境下使用水晶报表的方法,包括必要的命名...

    Crystal Reports 10 Java Reporting Component API Reference(EN)

    `ParameterFields`和`ParameterField`对象用于管理这些参数,通过`setParameterValue()`方法可以为参数赋值。 6. **运行与渲染报告**:`CrystalReportViewer`组件用于在Java应用中展示报表。它可以提供交互式查看,...

Global site tag (gtag.js) - Google Analytics