Birt API 实现动态参数列报表

效果简述:

      根据你传入的参数,动态展现展示列。

例如传入参数:columnNames: "EMPLOYEENUMBER,FIRSTNAME,LASTNAME,EMAIL,OFFICECODE",则显示这五列。

见图 figure1

 

 

试验环境:

       1:birt-report-designer-all-2_3_1 集成eclipse BIRT设计工具

       2:集成环境自带样例数据源:ClassicModels

       3:选用集成数据集 select * from CLASSICMODELS.EMPLOYEES

 

实现步骤:

       1:设计简单Birt报表模板(dynamicTableColumns.rptdesign),设置数据源、数据集、画表等,详细不多说了,参见《birt中文手册.chm》。

       2:编写java class(DynamicTableColumnHandle.class) 拓展 ReportEventAdapter 实现动态列报表。

       3:绑定报表模板eventHandle。

 

 

       1.1 设计报表模板(dynamicTableColumns.rptdesign)详细格式如见图figure2

 

       2.1 编写 java class(DynamicTableColumnHandle.class)

             2.1.1重写initialize方法,解析动态列名。

            

[java]  view plain copy
  1. @Override  
  2. public void initialize(IReportContext reportContext) {  
  3.         // TODO Auto-generated method stub  
  4.         try{  
  5.         super.initialize(reportContext);  
  6.                       
  7.         String columnsStr = (String)reportContext.getParameterValue("columnNames");           
  8.         dynamicColumns = doSplit(columnsStr, ","); //split columnsStr  
  9.               
  10.                           
  11.     }catch (Exception e) {  
  12.         e.printStackTrace();  
  13.     }  

           

            2.1.2重写beforeFactory,动态插入展示列,并设置样式。

           

[java]  view plain copy
  1. @Override  
  2.     public void beforeFactory(IReportDesign report, IReportContext reportContext) {  
  3.         // TODO Auto-generated method stub  
  4.         super.beforeFactory(report, reportContext);  
  5.           
  6.         try{  
  7.             ElementFactory elementFactory = reportContext.getDesignHandle().getElementFactory();  
  8.             TableHandle mytable = (TableHandle) reportContext.getDesignHandle().findElement("mytable");  
  9.             mytable.setWidth("100%");  
  10.                           
  11.               
  12.             RowHandle myheader = (RowHandle) mytable.getHeader( ).get( 0 );//获得表格头  
  13.             RowHandle mydetail = (RowHandle) mytable.getDetail().get( 0 );//获得明细行  
  14.             ColumnHandle mycolumn0 = (ColumnHandle) mytable.getColumns().get(0);//获取固定列  
  15.             mycolumn0.setProperty("width""2cm");  
  16.             mycolumn0.setProperty("backgroundColor""white");  
  17. //          mycolumn0.drop(); //drop the 0 column  
  18.               
  19.             String[] colors = {"red","orange","yellow","green","blue","navy","purple"};  
  20.             int i=0;//计列数  
  21.             for(String column : dynamicColumns){  
  22.                 mytable.insertColumn(i+1,1);//循环插入新列,每次加在最后一列的后面  
  23.                 ColumnHandle mycolumn = (ColumnHandle) mytable.getColumns().get(i+1);  
  24.                 mycolumn.setProperty("width""2cm");  
  25.                 mycolumn.setProperty("backgroundColor", colors[i%7]);  
  26.                 mycolumn.setProperty("color""black");  
  27.                   
  28.                 CellHandle dcell = (CellHandle) mydetail.getCells().get(i+1);//取得明细行单元格  
  29.                 //设置样式  
  30.                 dcell.setProperty("borderBottomColor","#000000");  
  31.                 dcell.setProperty("borderBottomStyle","solid");  
  32.                 dcell.setProperty("borderBottomWidth","1px");  
  33.                 dcell.setProperty("borderLeftColor","#000000");  
  34.                 dcell.setProperty("borderLeftStyle","solid");  
  35.                 dcell.setProperty("borderLeftWidth","1px");  
  36.                 dcell.setProperty("borderRightColor","#000000");  
  37.                 dcell.setProperty("borderRightStyle","solid");  
  38.                 dcell.setProperty("borderRightWidth","1px");  
  39.                 dcell.setProperty("borderTopColor","#000000");  
  40.                 dcell.setProperty("borderTopStyle","solid");  
  41.                 dcell.setProperty("borderTopWidth","1px");  
  42.   
  43.                 DataItemHandle myDataItem2 = elementFactory.newDataItem(column);  
  44.                 myDataItem2.setResultSetColumn(column);  
  45.                 dcell.getContent().add(myDataItem2);  
  46.                   
  47.                 CellHandle hcell = (CellHandle) myheader.getCells( ).get(i+1);  
  48.                 //设置样式  
  49.                 hcell.setProperty("borderBottomColor","#000000");  
  50.                 hcell.setProperty("borderBottomStyle","solid");  
  51.                 hcell.setProperty("borderBottomWidth","1px");  
  52.                 hcell.setProperty("borderLeftColor","#000000");  
  53.                 hcell.setProperty("borderLeftStyle","solid");  
  54.                 hcell.setProperty("borderLeftWidth","1px");  
  55.                 hcell.setProperty("borderRightColor","#000000");  
  56.                 hcell.setProperty("borderRightStyle","solid");  
  57.                 hcell.setProperty("borderRightWidth","1px");  
  58.                 hcell.setProperty("borderTopColor","#000000");  
  59.                 hcell.setProperty("borderTopStyle","solid");  
  60.                 hcell.setProperty("borderTopWidth","1px");  
  61.   
  62.                 LabelHandle myLabel = elementFactory.newLabel(column);  
  63.                 myLabel.setText(column);  
  64.                   
  65.                 hcell.getContent().add(myLabel);  
  66.                 i++;  
  67.   
  68.             }  
  69.           
  70.         pw.println("beforeFactory add tables done");  
  71.         }catch (Exception e) {  
  72.             e.printStackTrace();  
  73.         }  
  74.     }  

 

       3.1 绑定报表模板的eventHandle,详见下图figure3

 

参考资料:

      1:birt设计器中文手册.chm http://download.csdn.net/user/hob007

      2:报表模板及javaClass源文件(birt_API_动态列_实现.rar) http://hob007.download.csdn.net/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值