java - How to show JRBeanCollectionDataSource data with help of Table component? -
i need show jrbeancollectiondatasource data in table component (jasperreports).
here template, showperson.jrxml file:
<?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="showperson" pagewidth="612" pageheight="792" whennodatatype="nodatasection" columnwidth="555" leftmargin="20" rightmargin="20" topmargin="20" bottommargin="20" uuid="304c4c4e-c99a-4399-8081-748d3b7c0b8c"> <style name="table"> <box> <pen linewidth="1.0" linecolor="#000000"/> </box> </style> <style name="table_th" mode="opaque" backcolor="#f0f8ff"> <box> <pen linewidth="0.5" linecolor="#000000"/> </box> </style> <style name="table_ch" mode="opaque" backcolor="#bfe1ff"> <box> <pen linewidth="0.5" linecolor="#000000"/> </box> </style> <style name="table_td" mode="opaque" backcolor="#ffffff"> <box> <pen linewidth="0.5" linecolor="#000000"/> </box> </style> <subdataset name="table dataset 1" whenresourcemissingtype="empty" uuid="63b01547-bce2-47c9-ba15-666f94d11387"> <querystring language="sql"> <![cdata[]]> </querystring> <field name="name" class="java.lang.string"/> <field name="age" class="java.lang.integer"/> </subdataset> <parameter name="info" class="java.lang.string"/> <title> <band height="40" splittype="stretch"> <statictext> <reportelement uuid="e96450a8-8358-4cae-a094-3add06d57de2" x="0" y="20" width="56" height="20"/> <textelement/> <text><![cdata[info]]></text> </statictext> <textfield> <reportelement uuid="e21e9932-ebfe-4bb5-904d-ea99e141866b" x="56" y="20" width="100" height="20"/> <textelement/> <textfieldexpression><![cdata[$p{info}]]></textfieldexpression> </textfield> </band> </title> <detail> <band height="40" splittype="stretch"> <componentelement> <reportelement uuid="dea5d821-81b6-434b-ae27-4f3a0268e805" key="table 1" x="0" y="0" width="572" height="40"/> <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemalocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> <datasetrun subdataset="table dataset 1" uuid="39f8f0bf-8a2b-44f4-9a4c-0c873da79fba"> <datasetparameter name="report_data_source"> <datasetparameterexpression><![cdata[]]></datasetparameterexpression> </datasetparameter> <datasourceexpression><![cdata[$p{report_data_source}]]></datasourceexpression> </datasetrun> <jr:column width="169" uuid="aae649c4-6a69-485f-8a0d-87022df793ee"> <jr:tableheader height="20" rowspan="1"> <statictext> <reportelement uuid="795dac43-0ff0-482c-89a0-7dac3b27d513" x="0" y="0" width="169" height="20"/> <textelement/> <text><![cdata[name]]></text> </statictext> </jr:tableheader> <jr:detailcell height="20" rowspan="1"> <textfield> <reportelement uuid="4f1ab13a-d776-4cd5-a2a7-a5cf23360816" x="0" y="0" width="169" height="20"/> <textelement/> <textfieldexpression><![cdata[$f{name}]]></textfieldexpression> </textfield> </jr:detailcell> </jr:column> <jr:column width="173" uuid="a6997eea-131e-4555-80e6-a20d4decb18f"> <jr:tableheader height="20" rowspan="1"> <statictext> <reportelement uuid="5f6e2413-8025-47ca-9638-9609ea13f93f" x="0" y="0" width="173" height="20"/> <textelement/> <text><![cdata[age]]></text> </statictext> </jr:tableheader> <jr:detailcell height="20" rowspan="1"> <textfield> <reportelement uuid="195d51a0-9e45-4201-ad67-d3026ce2e72c" x="0" y="0" width="173" height="20"/> <textelement/> <textfieldexpression><![cdata[$f{age}]]></textfieldexpression> </textfield> </jr:detailcell> </jr:column> </jr:table> </componentelement> </band> </detail> </jasperreport> my pojo:
public class person { private string name; private int age; public string getname() { return name; } public void setname(string name) { this.name = name; } public int getage() { return age; } public void setage(int age) { this.age = age; } } main class building report:
public class openreport { public static void main(string[] args) throws jrexception { map<string, object> peoplemap = new hashmap<>(); peoplemap.put("sisco", 17); peoplemap.put("eve", 19); peoplemap.put("john", 20); peoplemap.put("george", 21); peoplemap.put("steve", 18); arraylist<person> datalist = new arraylist<person>(); for(map.entry<string, object> personmap : peoplemap.entryset()) { person person = new person(); person.setname(personmap.getkey()); person.setage(integer.valueof(personmap.getvalue().tostring())); datalist.add(person); } jrbeancollectiondatasource beancoldatasource = new jrbeancollectiondatasource(datalist); map parameters = new hashmap(); parameters.put("info", "hello"); jasperreport report = (jasperreport) jrloader.loadobject("src/test/ireport/showperson.jasper"); jasperprint jasperprint = jasperfillmanager.fillreport(report, parameters, beancoldatasource); jframe frame = new jframe("report"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().add(new jrviewer(jasperprint)); frame.pack(); frame.setvisible(true); } }
1.send datasource server parameter, , fill report different 1 (can empty).
jrbeancollectiondatasource beancoldatasource = new jrbeancollectiondatasource(datalist); map parameters = new hashmap(); parameters.put("info", "hello"); parameters.put("ds1", beancoldatasource); jasperreport report = (jasperreport) jrloader.loadobject("src/test/ireport/showperson.jasper"); jasperprint jasperprint = jasperfillmanager.fillreport(report, parameters, new jremptydatasource()); 2.decalre new parameter in report of type jrbeancollectiondatasource
<parameter name="ds1" class="net.sf.jasperreports.engine.jrbeancollectiondatasource"/> 3.set tabledatasource use $p{ds1} parameter.
<jr:table ...> <datasetrun subdataset="table dataset 1"> <datasetparameter name="report_data_source"> <datasetparameterexpression><![cdata[$p{ds1}]]></datasetparameterexpression> </datasetparameter> </datasetrun> ..... 4.declare fields (name, age) in table dataset 1.
5.in table, in detailband add textfield in each column corresponding field ($f{name} , $f{age} respectively).
Comments
Post a Comment