拉伸带有子报表的文本字段

时间:2009-11-23 07:34:07

标签: java jasper-reports ireport

我有详细的文本字段和子报表。我将值传递给子报表,该子报表显示特定记录的详细信息。问题是当子报表显示某个值时文本字段不会拉伸。

以下是我的jrxml带细节带的一部分:

<detail>
  <band height="40"  isSplitAllowed="true" >
    <textField isStretchWithOverflow="false" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
      <reportElement
        style="columnHeader"
        mode="Opaque"
        x="0"
        y="0"
        width="108"
        height="20"
        backcolor="#9999FF"
        key="groupMenu-1"/>
      <box></box>
      <textElement textAlignment="Center" verticalAlignment="Middle">
        <font pdfFontName="Helvetica-Bold" isBold="true" isPdfEmbedded ="false" pdfEncoding ="Cp1252"/>
      </textElement>
      <textFieldExpression   class="java.lang.String"><![CDATA[str("Code")]]></textFieldExpression>
    </textField>
    <subreport  isUsingCache="true">
      <reportElement
        mode="Transparent"
        x="0"
        y="39"
        width="100"
        height="1"
        key="subreport-1"
        stretchType="RelativeToTallestObject"
        positionType="Float"
        isPrintWhenDetailOverflows="true"/>
      <subreportParameter  name="requestListId">
        <subreportParameterExpression><![CDATA[$F{SPREADSHEET_REPORT_ID}]]></subreportParameterExpression>
      </subreportParameter>
      <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
      <subreportExpression  class="java.lang.String"><![CDATA[$P{subReportPath}]]></subreportExpression>
    </subreport>
  </band>
</detail>

4 个答案:

答案 0 :(得分:0)

在您分析jrxml之前,您可以尝试(在iReport中)右键单击文本字段&gt;属性&gt;拉伸类型,并选择两个非默认值(适合您的情况,我还不完全了解)

答案 1 :(得分:0)

我不确定这是否可行,拉伸时的文本字段不推送子报表。但是你可以用其他方法处理它。

  • 为什么不在“详细信息”区域上创建一个组带,并将此组表达式设置为$F{CODE},这样每次代码更改时都会呈现该组,同时与之相关的详细信息带此代码将在

  • 之后直接呈现
  • 第二个选项,为什么不将CODE作为参数发送到子报表并将其放在报表头中?

答案 2 :(得分:0)

你的意思是随着更多的数据填充它,该字段会向下延伸吗?

我认为这就是isStretchWithOverflow =“false”的用途。只是把它变成真实而不是假。

我可能不明白你在问什么:)

答案 3 :(得分:0)

我试过但它不起作用。所以我做的是接受子报表的查询并将其放在原始报表的查询中,类似于:

SELECT p.id AS 'id', ...*
FROM permiso AS p
...
+
SELECT *
FROM permiso AS p
....
WHERE p.id = $P{id}
GROUP BY p.id

=>

SELECT p.id AS 'id', ...*
FROM permiso AS p
    INNER JOIN (SELECT p.id AS 'id', *
         FROM permiso AS p
....
         GROUP BY p.id) AS subreport ON subreport.id = p.id

将子报表的字段放在原始报表中,这是使该字段“成为最大对象最高”的唯一方法。