Java 如何在水晶报表席中传递参数到Subreport 我有一个RPT,我是从水晶报表席的空白报告中创建的。 主报表只是一个简单的select查询,可以提示1个参数,子报表是查询列之一的成员(在本例中,我希望为每个部门的员工详细信息创建一个子报表)

Java 如何在水晶报表席中传递参数到Subreport 我有一个RPT,我是从水晶报表席的空白报告中创建的。 主报表只是一个简单的select查询,可以提示1个参数,子报表是查询列之一的成员(在本例中,我希望为每个部门的员工详细信息创建一个子报表),java,jsp,crystal-reports,struts,crystal-reports-xi,Java,Jsp,Crystal Reports,Struts,Crystal Reports Xi,问题是,子报表必须接收另一个根本不链接到主报表的2参数。 我尝试了一种正常的方法来逐个接收参数,但出现了一个错误: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 我知道这是因为报表(.rpt)只希望从主报表接收1个参数,因为它在主报表查询中只需要1个参数 下面是我分配参数的方法(我在jsp scriplet中使用它): 将多个值传递给主报表查询非常有效,但是当我想将其传递给子报表查询时,它不起作用,并且显示了超出范围的数组索引(因

问题是,子报表必须接收另一个根本不链接到主报表的2参数。 我尝试了一种正常的方法来逐个接收参数,但出现了一个错误:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
我知道这是因为报表(.rpt)只希望从主报表接收1个参数,因为它在主报表查询中只需要1个参数

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

将多个值传递给主报表查询非常有效,但是当我想将其传递给子报表查询时,它不起作用,并且显示了超出范围的数组索引(因为它没有意识到子报表也需要一些值)


有人能帮我做我想做的事情的最佳实践是什么?我可以用一种简单的方法来做,通过使用GROUPBY,而不是使用subreport,但是我想先试试subreport。对不起,我的提问方式不好,我只是一个爱管闲事的人。谢谢。

我建议仍然从主报告中传递参数,尽管它实际上不是从主报告中传递的。只需在主报表上创建两个新参数,然后将参数从主报表传递到子报表。并用同样的方法将c#中的值编码到crystal对象中。

您找到了解决方案吗?
/**
 * 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);
}