java - 交叉表和交叉数据集

标签 java jasper-reports

我正在尝试创建一个包含三行和 n 列的交叉表。我使用 CrosstabDataset 和 JRBeanCollectionDataSource 来显示我的数据。我的问题是我只能显示 CollectionDataSource 中的最后一个对象,我无权访问 crossDataSet 中的数据。

注意: 我使用 JRDesignCrosstab (java 代码)来创建 crossTab。

    public static JRDesignCrosstab CrosstabPanel(String parameterName , JasperDesign jasperDesign, JRDesignDataset subDataset) throws JRException {

    // parameter
    JRDesignParameter parameter = new JRDesignParameter();
    parameter.setName(parameterName);
    parameter.setValueClass(java.lang.Object.class);
    jasperDesign.addParameter(parameter);
    subDataset.addParameter(parameter);

    //Gross Tab
    JRDesignCrosstab crosstab = new JRDesignCrosstab();
    crosstab.setX(-90);
    crosstab.setY(-4);
    crosstab.setWidth(600);
    crosstab.setHeight(400);
    //Expression :
    JRDesignExpression expression = new JRDesignExpression("$P{"+parameterName+"}");

    //CrosstabDataset 
    JRDesignCrosstabDataset dataSet = new JRDesignCrosstabDataset();

    //datasetrun
    JRDesignDatasetRun dsr = new JRDesignDatasetRun();
    dsr.setDatasetName(subDataset.getName());
    dsr.setDataSourceExpression(expression);


    //datasetrun into CrosstabDataset
    dataSet.setResetType(ResetTypeEnum.NONE);
    dataSet.setDatasetRun(dsr);

    crosstab.setDataset(dataSet);


    //Bucket Row
    JRDesignCrosstabBucket bucket =  new JRDesignCrosstabBucket();
    JRDesignExpression expressionField = new JRDesignExpression();
    expressionField.setText("$F{commissionSimPaye}");
    bucket.setValueClassName("net.sf.jasperreports.engine.DataSource");
    bucket.setExpression(expressionField);

    //Row Group;
    JRDesignCrosstabRowGroup rowGroup = new JRDesignCrosstabRowGroup();
    rowGroup.setName("rowGroup");
    rowGroup.setBucket(bucket);
    rowGroup.setWidth(68*2+1);
    rowGroup.setTotalPosition(CrosstabTotalPositionEnum.END);
    crosstab.addRowGroup(rowGroup);

    //Bucket Second  Row
    bucket =  new JRDesignCrosstabBucket();
    expressionField = new JRDesignExpression();
    expressionField.setText("$F{commissionSimPaye}");
    bucket.setValueClassName("net.sf.jasperreports.engine.ReportContext");
    bucket.setExpression(expressionField);

    //Row Group;
    rowGroup = new JRDesignCrosstabRowGroup();
    rowGroup.setName("secondRowGroup");
    rowGroup.setBucket(bucket);
    rowGroup.setWidth(68*2+1);
    rowGroup.setTotalPosition(CrosstabTotalPositionEnum.END);
    crosstab.addRowGroup(rowGroup);


    //Bucket Column
    bucket =  new JRDesignCrosstabBucket();
    expressionField = new JRDesignExpression();
    expressionField.setText("$F{commissionSimCalcule}");
    bucket.setValueClassName("java.lang.Object");
    bucket.setExpression(expressionField);

    //ColumnGroup
    JRDesignCrosstabColumnGroup ColumnGroup = new JRDesignCrosstabColumnGroup();
    ColumnGroup.setName("columnGroup");
    ColumnGroup.setBucket(bucket);
    ColumnGroup.setHeight(60);
    ColumnGroup.setTotalPosition(CrosstabTotalPositionEnum.END);
    crosstab.addColumnGroup(ColumnGroup);


    JRDesignExpression expressionMesaure = new JRDesignExpression();
    expressionMesaure.setText("$F{commissionSimCalcule}");
    JRDesignCrosstabMeasure measure = new JRDesignCrosstabMeasure();
    measure.setName("ColumContent"+0);
    measure.setValueExpression(expressionMesaure);
    measure.setValueClassName("java.lang.Object");
    crosstab.addMeasure(measure);

    expressionMesaure = new JRDesignExpression();
    expressionMesaure.setText("$F{commissionSimPaye}");
    measure = new JRDesignCrosstabMeasure();
    measure.setName("ColumContent"+1);
    measure.setValueExpression(expressionMesaure);
    measure.setValueClassName("java.lang.Object");
    crosstab.addMeasure(measure);

    expressionMesaure = new JRDesignExpression();
    expressionMesaure.setText("$F{commissionSimAPaye}");
    measure = new JRDesignCrosstabMeasure();
    measure.setName("ColumContent"+2);
    measure.setValueExpression(expressionMesaure);
    measure.setValueClassName("java.lang.Object");
    crosstab.addMeasure(measure);

    //contenu de la cellule
    JRDesignTextField textField = new JRDesignTextField();
    JRDesignCrosstabCell cell = new JRDesignCrosstabCell();
    JRDesignExpression expressionTextField = new JRDesignExpression();
    JRDesignCellContents cellContents = new JRDesignCellContents();

        textField.setX(0);
        textField.setY(0);
        textField.setWidth(68);
        textField.setHeight(20);
        textField.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
        textField.getLineBox().getLeftPen().setLineWidth(1);
        textField.getLineBox().getTopPen().setLineWidth(1);
        textField.getLineBox().getRightPen().setLineWidth(1);
        textField.getLineBox().getBottomPen().setLineWidth(1);
        cell.setHeight(20);
        cell.setWidth(68);
        expressionTextField.setText("$V{ColumContent"+0+"}");
        textField.setExpression(expressionTextField);
        cellContents.addElement(textField);
        cell.setContents(cellContents);
        crosstab.addCell(cell);
    return crosstab;
    }

最佳答案

问题解决了,我研究了JRBeanCollectionDataSource的结构

关于java - 交叉表和交叉数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23104624/

相关文章:

java - Jasper Report PDF 中未显示乌克兰(西里尔文)字符

java - 当负数包含括号时,如何使字符串值总和为 Big.Decimal?

hadoop - 无法使用Hive连接器Jasper连接Hive数据库(默认情况下除外)

java - 如何设置 jasper 报告的相对类路径

java - String.valueOf(i) 与 ""+ i 或 i + ""

java - 在Java中,我们可以只使用一个套接字同时运行多个ObjectOutputStream吗?

java - 检测链表中的循环 - 指针何时相遇?如何通过交集找到循环的头部?

java - 标记为弃用的第三方类

java - 是否可以通过Java外部应用程序更改创建的iReport文件(jrxml)

java - HttpsURLConnection.getOutputStream() 是否在连接超时时重试?