[Jasper使用总结]iReport报表设计-动态列实现

有时候,有些报表要求列为动态的,需要由用户自己决定显示列。

在iReport中,本身并没有提供动态列的功能,但我们可以通过Java代码进行处理,来实现。

这里以iReport 4.5版本为例。


步骤1:设计报表

该报表必须含有一个参数:dynamiccolumn (名字可以随便取,类型必须为java.util.Collection)




步骤2:通过Java代码进行处理,并生成报表

[java]  view plain copy
  1. public static void main(String[] args) {  
  2.         try {  
  3.             //步骤1:获取JasperDesign  
  4.             JasperDesign jdesign = JRXmlLoader  
  5.                     .load("jrxmls//dynamiccolumn.jrxml");  
  6.   
  7.             Map<String, Object> params = new HashMap<String, Object>();  
  8.             params.put("dynamiccolumn",  
  9.                     java.util.Arrays.asList(new String[] { "No","Name","Gender"}));  
  10.               
  11.             //步骤2:根据dynamiccolumn参数,对不需要显示的列进行删除  
  12.             dynamiccolumn(jdesign,params);  
  13.   
  14.             // 步骤3:报表修改完成后,以修改后报表进行编译,并输出  
  15.             JasperReport jreport = JasperCompileManager.compileReport(jdesign);  
  16.             Connection conn = null;  
  17.             try {  
  18.                 conn = DriverManager.getConnection(  
  19.                         "jdbc:mysql://10.24.16.31:3306/ireportrun""root",  
  20.                         "isoftstone*1");  
  21.             } catch (SQLException e) {  
  22.                 e.printStackTrace();  
  23.             }  
  24.             JasperPrint jprint = JasperFillManager.fillReport(jreport, params,  
  25.                     conn);  
  26.             JasperExportManager.exportReportToHtmlFile(jprint,  
  27.                     "reports//dynamiccolumn.html");  
  28.         } catch (JRException e) {  
  29.             e.printStackTrace();  
  30.         }  
  31.     }  
[java]  view plain copy
  1. /** 
  2.      * @Title: dynamiccolumn 
  3.      * @Description: TODO(对design进行处理,去掉不应该显示的列) 
  4.      * @param @param jdesign JasperDesign 
  5.      * @param @param params 需要显示的列 
  6.      * @return JasperDesign 返回类型 
  7.      */  
  8.     public static JasperDesign dynamiccolumn(JasperDesign jdesign, Map params) {  
  9.         /* 
  10.          * 该方法目前仅进行了简单的处理,如需更多业务,且自行添加 比如:1. 修改元素的位置 2.自动调整Title的宽度 
  11.          * 3.自行调整整个报表的宽度 
  12.          */  
  13.         Collection dynamiccolumns = (Collection) params.get("dynamiccolumn");  
  14.         if (dynamiccolumns != null) {  
  15.   
  16.             JRDesignBand cHeader = (JRDesignBand) jdesign.getColumnHeader();  
  17.             JRBand cDetailBand = jdesign.getDetailSection().getBands()[0];  
  18.             JRDesignBand cDetail = null;  
  19.             if (cDetailBand != null && cDetailBand instanceof JRDesignBand) {  
  20.                 cDetail = (JRDesignBand) cDetailBand;  
  21.             }  
  22.             JRElement[] es_header = cHeader.getElements();  
  23.             JRElement[] es_detail = cDetail.getElements();  
  24.             for (int i = 0; i < es_header.length; i++) {  
  25.                 JRDesignElement e = (JRDesignElement) es_header[i];  
  26.                 String v = "";  
  27.                 if (e instanceof JRStaticText) {  
  28.                     JRStaticText text = (JRStaticText) e;  
  29.                     v = text.getText();  
  30.                 }  
  31.                 if (!dynamiccolumns.contains(v)) {  
  32.                     for (int j = 0; j < es_detail.length; j++) {  
  33.                         JRDesignElement ee = (JRDesignElement) es_detail[i];  
  34.                         if (ee.getY() == e.getY()) {  
  35.                             cDetail.removeElement(ee);  
  36.                         }  
  37.                     }  
  38.                     cHeader.removeElement(e);  
  39.                 }  
  40.             }  
  41.         }  
  42.         return jdesign;  
  43.     }  


报表运行结果,删除列之前:


报表运行结果,删除列之后:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值