Jump to content
Changes to the Jaspersoft community edition download ×

How to dynamic add/remove columns? Do I need to use DynamicJasper?


KenobiShan

Recommended Posts

**Overview**

 - I have a Java class which has an `ArrayList` that must be printed to
   the jasperReport as a subreport.
   
 - I'm using DynamicJasper library. But If theres a solution without it, I would appreciate it. They offer no free support even for a simple question like this.
 - The example on this question has been modified so it can be reproduced. However the data is different on the real case.


**Problem**

The current code Ive come with, prints the subreport in another line. Its ugly. I wanted the subreport to just be a group of columns that are concatenated.

To make it clear, here's the current result A1PKA.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

And What I want is something like this:


kCVLI.png


  

 

 

 


 

 

 

 

 

 

 

 

 

 

 

**Current code**

    public class Test_subReport {            protected static JasperPrint jp;        protected static JasperReport jr;        protected static Map params = new HashMap();        protected static DynamicReport dr;            public static void main(String args[]) throws SQLException, ColumnBuilderException, ClassNotFoundException {                Test_subReport t = new Test_subReport();            t.createReport();            }            public void createReport() throws SQLException, ColumnBuilderException, ClassNotFoundException {                ArrayList<Fruit> createMockDataset = createMockDataset();                Style titleStyle = new Style();            titleStyle.setHorizontalAlign(HorizontalAlign.CENTER);            titleStyle.setFont(Font.ARIAL_SMALL_BOLD);                Style dataStyle = new Style();            dataStyle.setHorizontalAlign(HorizontalAlign.CENTER);            dataStyle.setFont(Font.ARIAL_SMALL);            dataStyle.setBlankWhenNull(true);                final List items = SortUtils.sortCollection(createMockDataset, Arrays.asList(new String[]{"name", "description"}));                FastReportBuilder drb = new FastReportBuilder();            drb.setTemplateFile("templatePortrait.jrxml", true, true, true, true);            drb.addColumn("name", "name", String.class.getName(), 30, dataStyle)                    .addColumn("description", "description", String.class.getName(), 50, dataStyle)                    .setTitle("Report")                    .setSubtitle("")                    .setPrintBackgroundOnOddRows(true)                    .setUseFullPageWidth(true);                drb.addGroups(2);            try {                drb.addField("evaluations", List.class.getName());                drb.addSubreportInGroupHeader(1, createSubreport("Evaluations"));            } catch (Exception ex) {                Logger.getLogger(Test_subReport.class.getName()).log(Level.SEVERE, null, ex);            }                        DynamicReport dynamicReport = drb.build();                dynamicReport.setTitleStyle(titleStyle);                HashMap parametros = new HashMap();            parametros.put("dataRelatorio", MyTools.getDataPorExtenso());                doReport(dynamicReport, items, parametros);        }            public void doReport(final DynamicReport _report, final Collection _data, HashMap parametros) {            try {                JRDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(_data);                    JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(_report, new ClassicLayoutManager(), beanCollectionDataSource, parametros);                    JasperViewer.viewReport(jasperPrint);            } catch (JRException ex) {                ex.printStackTrace();            }        }            private DynamicReport createHeaderSubreport(String title) throws Exception {            FastReportBuilder rb = new FastReportBuilder();            DynamicReport dr = rb                    .addColumn("id", "id", Integer.class.getName(), 100)                    .addColumn("score", "score", Double.class.getName(), 50)                    .setMargins(5, 5, 20, 20)                    .setUseFullPageWidth(true)                    .setWhenNoDataNoPages()                    .setTitle(title)                    .build();            return dr;        }            private Subreport createSubreport(String title) throws Exception {            SubReportBuilder srb = new SubReportBuilder();            srb.setDynamicReport(createHeaderSubreport(title), new ClassicLayoutManager())                    .setStartInNewPage(true)                    .setDataSource(DJConstants.DATA_SOURCE_ORIGIN_FIELD, DJConstants.DATA_SOURCE_TYPE_COLLECTION, "evaluations");            return srb.build();        }            public ArrayList<Fruit> createMockDataset() {            ArrayList<Fruit> fruits = new ArrayList<>();                Fruit f1 = new Fruit();            f1.name = "Apple X1";            f1.description = "Yummy yummy apple for the stackoverflow readers 1";                Fruit f2 = new Fruit();            f2.name = "Apple Ag";            f2.description = "Yummy yummy apple for the stackoverflow readers 2";                Fruit f3 = new Fruit();            f3.name = "Apple Mn";            f3.description = "Yummy yummy apple for the stackoverflow readers 3";                Fruit f4 = new Fruit();            f4.name = "Apple O2";            f4.description = "Yummy yummy apple for the stackoverflow readers 4";                //Evaluations for f1            for (int i = 0; i < 4; i++) {                Evaluation e = new Evaluation();                e.id = i;                e.score = Math.random() * 10;                f1.evaluations.add(e);            }                //evaluations for f4            for (int i = 0; i < 4; i++) {                Evaluation e = new Evaluation();                e.id = i;                e.score = Math.random() * 10;                f4.evaluations.add(e);            }                fruits.add(f1);            fruits.add(f2);            fruits.add(f3);            fruits.add(f4);                return fruits;            }            public class Fruit {                public String name;            public String description;            public ArrayList<Evaluation> evaluations = new ArrayList<Evaluation>();                public Fruit() {                }                public Fruit(String name, String description) {                this.name = name;                this.description = description;            }                public String getName() {                return name;            }                public void setName(String name) {                this.name = name;            }                public String getDescription() {                return description;            }                public void setDescription(String description) {                this.description = description;            }                public ArrayList<Evaluation> getEvaluations() {                return evaluations;            }                public void setEvaluations(ArrayList<Evaluation> evaluations) {                this.evaluations = evaluations;            }            }            public class Evaluation {                public int id;            public double score;                public Evaluation() {                }                public Evaluation(int id, double score) {                this.id = id;                this.score = score;            }                public int getId() {                return id;            }                public void setId(int id) {                this.id = id;            }                public double getScore() {                return score;            }                public void setScore(double score) {                this.score = score;            }            }        }[/code]

 

Link to comment
Share on other sites

  • Replies 0
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Popular Days

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...