这里以iReport 4.5版本为例。
该报表必须含有一个参数:dynamiccolumn (名字可以随便取,类型必须为java.util.Collection)
步骤2:通过Java代码进行处理,并生成报表
public static void main(String[] args) {
try {
//步骤1:获取JasperDesign
JasperDesign jdesign = JRXmlLoader
.load("jrxmls//dynamiccolumn.jrxml")
Map<String, Object>params = new HashMap<String, Object>()
params.put("dynamiccolumn",
java.util.Arrays.asList(new String[] { "No","Name","Gender"}))
//步骤2:根据dynamiccolumn参数,对不需要显示的列进行删除
dynamiccolumn(jdesign,params)
// 步骤3:报表修改完成后,以修改后报表进行编译,并输出
JasperReport jreport = JasperCompileManager.compileReport(jdesign)
Connection conn = null
try {
conn = DriverManager.getConnection(
"jdbc:mysql://10.24.16.31:3306/ireportrun", "root",
"isoftstone*1")
} catch (SQLException e) {
e.printStackTrace()
}
JasperPrint jprint = JasperFillManager.fillReport(jreport, params,
conn)
JasperExportManager.exportReportToHtmlFile(jprint,
"reports//dynamiccolumn.html")
} catch (JRException e) {
e.printStackTrace()
}
}
/**
* @Title: dynamiccolumn
* @Description: TODO(对design进行处理,去掉不应该显示的列)
* @param @param jdesign JasperDesign
* @param @param params 需要显示的列
* @return JasperDesign 返回类型
*/
public static JasperDesign dynamiccolumn(JasperDesign jdesign, Map params) {
/*
* 该方法目前仅进行了简单的处理,如需更多业务,且自行添加 比如:1. 修改元素的位置 2.自动调整Title的宽度
* 3.自行调整整个报表的宽度
*/
Collection dynamiccolumns = (Collection) params.get("dynamiccolumn")
if (dynamiccolumns != null) {
JRDesignBand cHeader = (JRDesignBand) jdesign.getColumnHeader()
JRBand cDetailBand = jdesign.getDetailSection().getBands()[0]
JRDesignBand cDetail = null
if (cDetailBand != null &&cDetailBand instanceof JRDesignBand) {
cDetail = (JRDesignBand) cDetailBand
}
JRElement[] es_header = cHeader.getElements()
JRElement[] es_detail = cDetail.getElements()
for (int i = 0i <es_header.lengthi++) {
JRDesignElement e = (JRDesignElement) es_header[i]
String v = ""
if (e instanceof JRStaticText) {
JRStaticText text = (JRStaticText) e
v = text.getText()
}
if (!dynamiccolumns.contains(v)) {
for (int j = 0j <es_detail.lengthj++) {
JRDesignElement ee = (JRDesignElement) es_detail[i]
if (ee.getY() == e.getY()) {
cDetail.removeElement(ee)
}
}
cHeader.removeElement(e)
}
}
}
return jdesign
}
得到List后判断其长度。list.size()。如果够20不做处理,如果不够,加满20,这样jsp页面就一直是满的,加空对象不知道行不行,你试试,我说的你理解吗?我没试,只是思路。方法/步骤首先,创建IReport表格文件,双击打开“Jaspersoft iReport Designer 5.6.0 ”,设计器界面如下图所示:
接着,在左上角找到“文件”,点击它下面的“New...”子项,打开新建窗口,如下图所示:
由于是新建报表,需要选择Report,一般情况下,选择的模板是Blank A4,单击“Launch Report Wizard”,进入下一步
如下图所示:
这时,进入填写报表的名称和选择生成文件路径,选填完毕后单击“下一步”,
如下图所示:
然后,填写查询。如果没有默认的数据库选择,需要单击“New”,选择数据库驱动、路径,填写数据库账号和密码,
如下图所示:
由于用的是MySQL数据库,数据库连接用的是JDBC连接,填写查询名称,JDBC驱动,JDBC路径,数据库用户名和密码
如下图所示:
由于连接数据库,需要查询数据库,编写SQL语句,
如下图所示:
进入下一步后,将需要的字段添加到右边框中
如下图所示:
接着,编写完SQL语句后,需要分组的话,选择某一字段,
如下图所示:
上述设置完毕后,进入完成状态,单击“完成”,
如下图所示:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)