2014-04-16 2 views
1

세 줄과 n 열로 교차 탭을 만들려고합니다. CrosstabDataset과 JRBeanCollectionDataSource를 사용하여 데이터를 표시했습니다. 내 문제는 내 CollectionDataSource에서 마지막 개체 만 표시 할 수 있습니다. 내 crossDataSet의 데이터에 액세스 할 수 없습니다.크로스 탭 및 crossDataSet

NB : JRDesignCrosstab (java 코드)을 사용하여 교차 탭을 만들었습니다. 문제가 해결

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; 
    } 

답변

0

, 난은 JRBeanCollectionDataSource

의 구조에 일