我认为这将是一个非常好的记录,因为它是JasperReports的核心主题,但我无法在任何地方找到答案。
详情频段的目的/功能/意图是什么?它应该只是报告的核心部分还是核心部分?
从另一个问题可以看出,细节带和JRDatasource提供的记录/ bean之间存在1:1的关系。这一启示揭示了一些切线问题:
JasperFillManager
null
数据来源会怎样?是否仍有细节带?我不想一次提出多个问题,但这些问题是如此相似 - 我宁愿一次性完成所有这一切,而不是因为多个几乎相同的问题而混乱。提前谢谢。
答案 0 :(得分:9)
详细信息带确实是报告数据源的每个元素的带。报告引擎自动遍历数据源,并使用数据源的相应元素将数据插入到详细信息带的模板中。
您当然可以在一个页面上拥有多个元素。根据乐队的属性(允许分割,高度等),分页将由Jasper Reports自动处理,因此引擎将决定每页上打印的元素数量,何时转到下面页面等。
如果数据源中没有任何内容,则不会打印详细信息带。其他频段的打印取决于报告的参数。
答案 1 :(得分:3)
详细信息band
的目的是为您提供放置和配置报表元素的模型。我不认为bean和detail band之间的关系是一对一的,因为你可以在一个bean中放置许多bean属性元素。所以,我会说细节带与报告bean元素的集合紧密相关。
但有一个区别是,细节带的功能与您通过JRDataSource
提供的bean /记录数量无关。细节带将遍历所有这些,直到数据源被“消耗”。
此外,我个人觉得细节带允许您遍历bean属性集合非常有用。因此,在继续前进之前,在细节范围内放置几个属性将遍历所有属性。
如果您将null
作为DataSource
传递,则不会获得有关该报告的任何数据,只会显示static
个文字。
答案 2 :(得分:0)
我记得,你可以看到详细信息带作为报告中行/记录的“模型”。对于JRDatasource提供的每条记录,您在详细信息区域内放置的所有元素都将重复。
例如,您的详细信息区域可能包含两个文本字段,一个值为$ {companyName},另一个值为$ {revenue}。
如果您现在将报告三行传递,那么将对每个行评估“companyName”和“revenue”,您可能会得到以下内容:
|Apple | $1000,000,000|
|Microsoft | $500,000,000|
|My amazing company | $12|
即,细节带内容已重复三次。
所以: - 如您所见,您可能只需要配置一个细节带。不确定JRXML中是否允许有多个。 - 细节带和页面之间没有关系。分页是单独处理的。 - 说实话,不确定。我最好的猜测是异常,或者你没有得到细节带应该呈现的行。
答案 3 :(得分:0)
你误解了一个细节乐队是什么。
将为您的数据源中的每个元素打印报告的详细信息区域。如果使用数据库数据源,则详细信息将按行与结果集一起打印多次。如果您使用JRBeanCollection
数据源,则详细信息区域将与项目中的项目一起打印多次。
回答你的问题:
您无法指定多个详细信息频段,这是非法的。您可以 为此目的使用子报告。
报告将每页输出尽可能多的细节带。另一方面,您可以使细节带与所需报告的高度相同 输出将是(减去页眉/页脚/等高度)。如果要在A4纸上打印报告 可以使你的细节带高297毫米(考虑到你没有其他乐队)。然后每个细节带都会 打印在一个单独的页面中。
答案 4 :(得分:0)
您所拥有的信息是正确的,您只是对它的含义略有误解。
1:1的关系是在填充时间;报告填写完毕后,数据集中的每条记录都会有一个详细的带。在设计报告时,您只需添加一次波段,但在填写报告时反复重复该波段。
您可以根据需要添加任意数量的细节带。每个波段与数据集记录具有1:1的关系,并且在移动到下一个记录之前填充所有细节波段(即,如果您有三个波段A,B和C;它们在报告中的顺序将是是ABCABC ......不是AAA ...... BBB ...... CCC ......)。
可以通过编程方式添加频段,但需要注意的重点是,您要在报告设计中添加频段,而不是已完成的报告。因此,正如jrxml设计一样,您可以添加一次带,并为每条记录重复一次。 Check this example
报告页面和细节带之间没有关系。报告填充程序将尽可能多地放在页面上,同时尊重每个频段的splitType
以及其他报告属性。
是否允许传递空数据源?在任何情况下,1:1关系仍然有效:具有0条记录的数据集在报告中产生0个细节带。