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

Java 拉伸带区中带有子报表的文本字段,java,jasper-reports,ireport,Java,Jasper Reports,Ireport,我有一个文本字段和一个子报告在详细波段。我将该值传递给子报表,该子报表显示特定记录的详细信息。问题在于,当子报表显示某些值时,文本字段不会拉伸 以下是我的jrxml的一部分和详细信息栏: <detail> <band height="40" isSplitAllowed="true" > <textField isStretchWithOverflow="false" isBlankWhenNull="true" evaluationTime="Now

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

以下是我的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>


在评测jrxml之前,您可以尝试(在iReport中)右键单击textfield>Properties>Stretch类型,并从两个非默认值中选择一个(以适合您的情况为准,我还不完全理解)

我不确定这是否可行,拉伸时的textfield不会推送子报表。但你可以用其他方法来处理

  • 为什么不在“Detail”标注栏上创建一个组标注栏,并将该组表达式设置为
    $F{code}
    ,以便每次代码更改时都会呈现该组,同时,与该代码相关的详细标注栏将直接呈现在其之后

  • 第二个选项,为什么不将代码作为参数发送到子报表并将其放在报表标题中


您的意思是,当更多数据填满字段时,字段会向下延伸吗

我认为这就是isStretchWithOverflow=“false”的目的。只要把它变成真的,而不是假的


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

我试过了,但没有成功。所以我所做的就是把对子报表的查询放到原始报表的查询中,类似这样:

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

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

更新您的帖子,以便可以看到jrxsml。您可以解释更多内容或放置屏幕截图吗?我已经这样做了,当同一波段内没有子报表时,它会工作,如果带区内有子报表,则它不会拉伸,而是子报表适合。请尝试将子报表的位置类型设置为“浮动”