如何在Jasper Report中创建树结构?

时间:2016-03-03 17:04:49

标签: java jasper-reports

我需要在报告中显示分层数据结构。

像这样的东西

Sample Table

我的数据结构是:

class X
{
    List<Y> list;
}

class Y
{
   List<Z> list
}

如何在碧玉报告中实现这一目标?

2 个答案:

答案 0 :(得分:1)

使用您显示的数据结构实现这种布局通常通过使用子报表(或列表/表组件)来完成

结构将是:

  1. 主要报告,迭代所有x包括subreport 1 yz传递List<Y> list作为数据源。

  2. 子报告1,迭代所有y,包括subreport 2 zList<Z> list作为数据源传递z

  3. 子报告2,迭代所有new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{list})

  4. 要生成数据源,JRBeanCollectionDataSource可以为您提供示例stretchType

    要实现 rowspan ,请使用reportElement上的<textField> <reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="100" height="20" uuid="bf6b550c-f37d-4e10-b8dd-1d91c4e6905a"/> <textElement verticalAlignment="Middle"/> <font size="12"/> </textElement> <textFieldExpression><![CDATA[$F{x}]]></textFieldExpression> </textField> 属性(RelativeToBandHeight或RelativeToTallestObject)

    实施例

    <jr:list>

    您不喜欢子报告,对于一个级别结构,可以使用var map = L.map('map'); var osm = L.tileLayer('http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, Tiles courtesy of <a href="http://hot.openstreetmap.org/" target="_blank">Humanitarian OpenStreetMap Team</a>' }); var geojsonFeature = [{ "type": "Feature", "properties": { "id": "marker1", "name": "Coors Field" }, "geometry": { "type": "Point", "coordinates": [-104.99404, 39.75621] } }, { "type": "Feature", "properties": { "id": "marker2", "name": "School", }, "geometry": { "type": "Point", "coordinates": [-104.69404, 38.85621] } }]; var markerLayer = L.geoJson(null, { pointToLayer: function(feature, latlng) { return L.marker(latlng, {}); }, onEachFeature: function(feature, layerinfo) { if (feature.properties) { var content = "<table class='table table-striped table-bordered table-condensed'>" + "<tr><th>Name</th><td>" + feature.properties.name + "<table>"; layerinfo.bindPopup(content, { closeButton: true }); } } }); markerLayer.addData(geojsonFeature); markerLayer.addTo(map); map.fitBounds(markerLayer.getBounds()); map.setZoom(16); map.addLayer(osm); 组件,请参阅samples

答案 1 :(得分:0)

我们遇到了同样的问题,经过一段时间的搜索,我们决定使用jasper-report html组件解决它。它的作用是,它允许我们在报告中添加html内容。因此,我们生成了html内容并将其存储在数据库中。并在jasper报告中插入html数据。希望这可以帮助。