在JasperReports中动态添加textField

时间:2013-03-29 00:04:56

标签: java jasper-reports

有没有办法在Jasper报告中动态地将textField添加到columnFooter。

我有可能需要使用的情况:

  <columnFooter>
      <band height="21" splitType="Stretch">
        <textField isStretchWithOverflow="true">
            <reportElement x="0" y="0" width="50" height="21"/>
            <textElement textAlignment="Center" verticalAlignment="Middle"/>
            <textFieldExpression><![CDATA["Example text...."]]></textFieldExpression>
        </textField>
      </band>

      <columnFooter>
      <band height="42" splitType="Stretch">
        <textField isStretchWithOverflow="true">
            <reportElement x="0" y="0" width="50" height="21"/>
            <textElement textAlignment="Center" verticalAlignment="Middle"/>
            <textFieldExpression><![CDATA["Example text...."]]></textFieldExpression>
        </textField>            <textField isStretchWithOverflow="true">
            <reportElement x="0" y="0" width="50" height="21"/>
            <textElement textAlignment="Center" verticalAlignment="Middle"/>
            <textFieldExpression><![CDATA["More example text...."]]></textFieldExpression>
        </textField>
      </band>

(或者添加任意数量的textFields。由于我不知道会添加多少个,我需要以某种方式动态调整乐队的大小)我正在寻找一种在Java中动态执行此操作的方法而不必对其进行硬编码在jrxml文件中。感谢

3 个答案:

答案 0 :(得分:0)

使用第二种方法在textFields上设置PrintWhenExpression,并在此textFields的属性上设置“删除空行时删除行”复选框。

答案 1 :(得分:0)

如果您的报告是以JRDesign动态创建的,则可以使用以下内容:

JRDesignBand band = (JRDesignBand) jasperDesign.getColumnFooter();
        JRDesignTextField textField = new JRDesignTextField();
        textField.setX(0);
        textField.setY(0);
        band.addElement(textField);

答案 2 :(得分:0)

我很遗憾地说,但经过多年使用JR Java API,我觉得它的设计目的是打印固定的文档布局。 在您的情况下可能有所帮助:如果您知道可能出现的最大字段数,只需将它们全部添加到频段,并为每个字段设置“删除行空白时”标志为true。它会折叠未使用的字段。