我想水平显示元素(在一个“行”)。我在想象这个问题,就像一个有一行和多个列的表格一样。此表中的每个单元格包含相同的子报表,但具有不同的数据源。如何水平显示自定义数量的元素?
在开始时,我试图组合一个组件列表和子报表。但事实证明,列表组件不支持水平布局。我读某处使用交叉表代替。但是,当我试图将子报表插入度量单元格时,iReport会显示一条消息,表示我无法做到这一点。那么我能做什么?
我想水平显示元素(在一个“行”)。我在想象这个问题,就像一个有一行和多个列的表格一样。此表中的每个单元格包含相同的子报表,但具有不同的数据源。如何水平显示自定义数量的元素?
在开始时,我试图组合一个组件列表和子报表。但事实证明,列表组件不支持水平布局。我读某处使用交叉表代替。但是,当我试图将子报表插入度量单元格时,iReport会显示一条消息,表示我无法做到这一点。那么我能做什么?
根据您的上述评论,我会说,打印水平元素列表并不难。 List组件基本上是一个子报表。所以,你也可以创建一个自定义List组件,它可以水平地打印一个元素列表。您只需创建一个没有任何边距的新报告,将其设置为“打印订单”至“水平”,并根据您的要求设置列的数量。然后,您可以将此报告作为子报告嵌入到一些主要报告中,并水平打印元素。
根据您的要求,您可以相应地设置报告和文本字段大小。以下是该报告中,我创建的截图:
这里就是我创建的示例JRXML文件:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" columnCount="5" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="119" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band splitType="Stretch"/>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band splitType="Stretch"/>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{field}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band splitType="Stretch"/>
</pageFooter>
<summary>
<band splitType="Stretch"/>
</summary>
</jasperReport>
好的。据我了解,你建议在创建报告时设置足够数量的页面列(例如6)。并且稍后仅使用其中的一部分(例如其中的前3个)。这说得通。 – emstol 2012-01-18 07:21:51
@bchetty:对不起,我选择了,因为我不回答,而不是评论有足够的声誉来这样做。你发布的解决方案工作正常,但它使报表布局非常不好。对于我将列大小保持为20的情况,我有一个很好的要求,但是我无法预测它在某些查询中不会跨越20。同样,如果只从列的查询中提取三个值,则剩余列空间保持为空,并且不会为生成的报告提供良好的布局。
我在iReport终极指导书中读到,如果List被用作子报告,而printOrder“横向”我们可以得到动态列的效果。但我想这只是一个“效应”,实际上并不是动态列,因为列大小必须固定为大于1的某个值。
我在智慧结束尝试实现这一点,但我想我可能不得不放弃。交叉表无法解救,因为它受到两个行组和两个列组的限制。但是报告还有其他必须与动态列一起打印的字段。 Printing a sub report data horizontally
我并不完全了解您的要求。你说你想使用'List'组件,但是不支持'Horizontal'布局。所以,你正在考虑使用crosttab来水平显示元素列表?那是你要的吗? – bchetty 2012-01-17 21:35:41
至于在交叉表内使用子报表(根据您的标题),我从来没有尝试过或想过这样做......我建议不要这样做。注意在交叉表中使用'Stretch'功能,这会使您的应用程序陷入无限循环问题。 – bchetty 2012-01-17 21:38:56
嗯..我想水平显示元素(在一个“行”)。我在想象这个问题就像一个有一行和多列动态数据的表格。此表中的每个单元格包含相同的子报表,但具有不同的数据源。 – emstol 2012-01-17 21:54:28