Jasper reports 如何水平显示自定义数量的元素?
我希望水平显示元素(在一行中)。我把这个问题想象成一个具有一行和动态列数的表。此表中的每个单元格都包含相同的子报表,但数据源不同Jasper reports 如何水平显示自定义数量的元素?,jasper-reports,Jasper Reports,我希望水平显示元素(在一行中)。我把这个问题想象成一个具有一行和动态列数的表。此表中的每个单元格都包含相同的子报表,但数据源不同 开始时,我尝试将组件列表和子报表结合起来。但事实证明列表组件不支持水平布局。我在某个地方读到了使用交叉表的信息。但是,当我试图将子报表插入测量单元时,iReport会显示一条消息,说明我无法执行此操作。那么我能做些什么呢?基于您的上述评论,我想说水平打印元素列表并不是那么困难。列表组件基本上是一个子报表。因此,您还可以创建一个自定义列表组件,它水平打印元素列表。您只需
开始时,我尝试将组件列表和子报表结合起来。但事实证明列表组件不支持水平布局。我在某个地方读到了使用交叉表的信息。但是,当我试图将子报表插入测量单元时,iReport会显示一条消息,说明我无法执行此操作。那么我能做些什么呢?基于您的上述评论,我想说水平打印元素列表并不是那么困难。列表组件基本上是一个子报表。因此,您还可以创建一个自定义列表组件,它水平打印元素列表。您只需创建一个没有任何边距的新报告,将其“打印顺序”设置为“水平”,并根据需要设置列数。然后,您可以将此报表作为子报表嵌入某些主报表中,并水平打印元素 根据您的要求,可以相应地设置报告和文本字段的大小。以下是我创建的报告的屏幕截图:
<?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>
下面是我创建的示例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>
@bchetty:很抱歉,我选择回答而不是评论,因为我没有足够的声誉这么做。您发布的解决方案工作正常,但它使报表布局非常不正常。我有一个很可笑的要求,我将列的大小保持为20,但我永远无法预测在某些查询中它不会超过20。同样,如果只从列的查询中获取了三个值,那么剩余的列空间将保持为空,并且不会为生成的报告提供良好的布局 我在iReport ultimate指南书中读到,如果列表被用作子报告,并且printOrder“水平”,我们可以获得动态列的效果。但我想这只是一种“效果”,实际上并不是动态列,因为列大小必须固定为大于1的某个值 我在试图实现这一目标时束手无策,但我想我可能不得不放弃。交叉表也无法拯救,因为它受到两个行组和两个列组的限制。但报告中还有其他字段必须与动态列一起打印。
我不太明白您的要求。您说过您想使用“列表”组件,但它不支持“水平”布局。那么,您正在考虑使用crosttab来水平显示元素列表?这就是你想要的吗?至于在交叉表中使用子报表(根据你的标题),我从来没有尝试过或考虑过这样做……我建议不要这样做。当心在交叉表中使用“拉伸”功能,这会使你的应用程序陷入无限循环问题。嗯。。我希望水平显示元素(在一行中)。我把这个问题想象成一个只有一行和动态列数的表。此表中的每个单元格都包含相同的子报表,但数据源不同。确定。据我所知,您建议在创建报表期间设置足够数量的页面列(例如6)。然后只使用其中的几个(例如前3个)。这是有道理的。