如何将参数传递到Crystal Reports XI中的子报表

时间:2015-11-29 09:50:24

标签: java jsp crystal-reports struts crystal-reports-xi

我有一个.rpt,我是根据Crystal Reports XI中的空白报告创建的.rpt。 主报表只是一个简单的选择查询,可以提示1个参数,子报表是查询列之一的成员(在这种情况下,我想为每个部门的员工详细信息创建一个子报表)

问题是,子报表必须接收另外两个参数,该参数根本没有链接到主报表。 我已经尝试了一种正常的接收参数的方法,但是我收到了一个错误:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

我知道这是因为报告(.rpt)只想从主报告中只接收1个参数,因为它只需要主报告查询中的1个参数。

这是我分配参数的方法(我在jsp scriplet中使用它):

/**
 * Modify the crystal report document current value parameters.
 *
 * @param paramIndex the index position of the parameter.
 * @param valContent the value content for the parameter.
 * @param clientDoc the ReportClientDocument object.
 */
public void setDocParameter(int paramIndex, String valContent, ReportClientDocument clientDoc)
   throws ReportSDKException {
ParameterField newParameterField = null;
ParameterFieldDiscreteValue newDiscreteValue = null;

// Get the copy of the param object.
newParameterField = new ParameterField();
((ParameterField)clientDoc.getDataDefinition().getParameterFields().getField(paramIndex)).copyTo(
    newParameterField, true);

System.out.println(paramIndex);
// Set Discrete value.
newDiscreteValue = new ParameterFieldDiscreteValue();
newDiscreteValue.setValue(valContent);

// Set ParameterField with the Discrete value.
newParameterField.getCurrentValues().add(newDiscreteValue);

    // Modify with the new ParameterField
clientDoc.getDataDefController().getParameterFieldController().modify(
        (IParameterField)      clientDoc.getDataDefinition().getParameterFields().getField(paramIndex)
        , newParameterField);
}

将多个值传递给主报表查询一切正常,但是当我想将它传递给子报表查询时,它没有工作并且显示数组索引超出范围(因为它没有&#39 ; t识别子报表也需要一些值)

有人可以帮助我以最佳方式做我想做的事吗?我可以通过使用group by,而不是使用子报表以简单的方式完成它,但我想先尝试子报表。对不起我的质询方式,我只是一个代码新手。谢谢。

1 个答案:

答案 0 :(得分:0)

我建议仍然从主报告中传递参数,即使它实际上并非来自那里。只需在主报表上创建2个新参数,然后将参数从主报表传递到子报表。并使用相同的方式将代码从c#中获取到晶体对象中。