转载 整理收藏
iReport中的NULL值问题
问题补充:
iReport中如果后台没有传过值来会显示NULL,或者把BLANK WHEN NULL点上就会显示空值,那么我想在为空值的时候显示"/",不知道如何实现?
最佳答案
在text fieldexpression(文本框表达式)中加入判断
例如:($F{myField}==null) ? "/":$F{myField}
ireport常见问题
2010-08-22 10:32
$V{PAGE_NUMBER} 表示当前是第几页 ,在text field 的 选项evaluation time选report是共几页,now表是当前页。页码可在ireport里直接设置。 “共几页 第几页” iReport报表开发中遇到的问题: 1。 报表中工具栏中 T :不会变得文字 F :程序传过来的文字字段 2。 在网页上预览报表什么内容也不显示 解决方法: 编辑-〉报表属性-〉More...->在“如果没有数据时:后面的下拉菜单中选 All sections,no detail” 如果没有数据时:后面的下拉菜单中的几个选项的意思分别是: No pages [当Detail中没有数据时没有页显示] Blank page [当Detail中没有数据时出现一个空白页面] All sections,no detail [当Detail中没有数据时会显示detail以外的东西] No-date section [] 暂时我也不知道,呵呵。 3。 Detail 和columnFooter 只间总是有一段空白 解决方法:从 iReprot 工具列设定 [预览] -> [报表属性] 打开[More...] -> [Floating column footer] 打勾columnFooter 就會和 Detail 在一起了。 4。 报表中Detail循环部分内容的显示格式 报表中Detail循环部分内容的显示格式与报表属性-〉Page Margin -> 下边界的大小有关 比如detail中有两列,当数据将第一列填充满时[根据detail页面大小] 会将数据自动填充到第二列[detail页面大小能决定什么时候第一列能被数据填充满] 多条数据在Detail中填充的时候是按照页面给显示数据所留大小填充的 控制显示多少行数据的时候严格按照页面能显示多少条数据来作出判断 按照条件显示的控件在不显示的时候仍然占据页面位置。 5。文字框中 Common 选项卡: Print when expression 属性里是Boolean类型代表此字段的显示与否内容一般是: new Boolean(结果是boolbean类型的表达式) 6。文字框中Font选项卡字体选择是成套的才能正确显示: [1] Font Name:选 宋体 PDF Font Name:选 STSong-Light 最后 PDF Encoding:选 UniGB-UCS2-H (Chinese Simplified) [2] 引用外部字体如隶书 将字体文件放入iReport安装目录的fonts文件夹下如隶书[D:\iReport-3.0.0\fonts\SIMLI.TTF] Font Name:选 隶书 PDF Font Name:选外部字体文件 隶书 (SIMLI.TTF) 最后 PDF Encoding:选 Identity-H (Unicode with horizontal writing)[是外部文件都选它] 7。动态文字框中 Text Field 选项卡: 中间有个 [复选框 Blank when null] 表示:当此文本框内容为空时是否显示null。 钩上表示为null时显示空白会比较好看些,不钩显示null。 8。$V{PAGE_COUNT} 表示当前是这页的第几条记录[在detail循环相关区域用] $V{PAGE_NUMBER} 表示当前是第几页 $V{COLUMN_NUMBER} 表示detail有几字段 9。字段即列数在工具中编辑->报表属性->字段数中设置。 字段数把detail区分为相应的这些列,当一页中第一列显示不过了会自动跳到本页的第二列以此类推 10。报表中数据转换类型: $V{PAGE_COUNT}.intValue() 报表中V属性转为int Integer.valueOf($P{pageCount}).intValue() 报表中P属性转为int Double.valueOf($F{realSum}) 报表中F类型转为Double ($V{realSums}.doubleValue()+$V{realSumMs}.doubleValue()) double类型相加求和 Boolean.valueOf(((List)$F{mentalState}).contains("02")) 将boolean值转为Boolbean 11。 报表中数据的操作: 文字框中的加法操作时:加号左右必须是数值类型如不是,加号就变成连接作用,而不是做加法操作了。 (($V{realSums}!=null?$V{realSums}:Double.valueOf(0)).doubleValue() + ($V{realSumMs}!=null?$V{realSumMs}:Double.valueOf(0)).doubleValue())+" 元" 12。 报表中用到的一些方法: contains()方法:((List)$F{mentalState}).contains("02") 从List类型的mentalState中查找 02 返回boolean值 equals()方法:用于两个String类型之间的比较 valueOf()方法括弧中间方的值只能是String类型的,不然编译会报错 13。 报表区域结构说明: title 报表头[只在第一页的最上面显示] pageHeader 页头[每一页都会显示] columnHearder [和columnFooter作用差不多,columnHearder在detail之前显示] detail [需要循环显示的东西在此处写] columnFooter [展示在循环显示的下面]具有循环的$V{PAGE_COUNT}当前记录 pageFooter 报表尾[最后一页的最下方显示] summary [此处用于做统计,显示的话用处不大] |
页面设置,纸张大小
工具栏----Format------pageformat……
ireport中的几个小问题:
1.ireport 中对于$F{propertyName},$V{variableName}如何换行
2.ireport中如果静态文本太多如何换行
3.ireport中如何解决换行导致的单元格对不齐问题
4.在ireport中如何把java.util.Date属性显示成yyyy-MM-dd形式,默认ireport的Date显示形式为"09-10-11上午12:00"
5.ireport使用java.math.BigDecimal进行精确的数值运算
前置条件:
这里讲的换行,是ireport根据显示数据元素$F{propertyName},$V{variableName}的宽度和数据内容进行自动换行,而非自己设置的换行
解决:
1.对于$F{propertyName},$V{variableName}只需在属性表中选中Stretch With Overflow即可
2.ireport中静态标记label不支持多行显示(目前个人理解),那么当要显示很多静态文本,而列头不够大,那该怎么办?
解决办法:我们定义一个$V{variableName}变量,变量的值默认为要显示的静态文本,那么此时我们只有对$V{variableName}进行1同样设置即可
3.鉴于ireport中显示的表格是拼凑出来(由每一个单独的单元格组成),要显示表行效果那么要求每个单元格高度是一样的,如果在显示时
一个单元格由于内容太多而换行了,而其它没换行那么其显示高度肯定不一致了(具体看图ireport中$F{}换行后导致单元格对不齐问题.bmp),此时我们
只要把该行所有单元格的属性StretchType="relative to band height"即可
4.对于ireport以javabean做数据源,且要显示的记录中有数据类型为java.util.Date的属性。
如果直接显示该属性那么页面显示日期格式为"09-10-11 上午 12:00" 而我们要求显示日期格式为yyyy-MM-dd
那么此时我们可以这样做:定义变量$V{variableName}其表达式为 "new java.sql.Date($F{日期属性}.getTime()).toString()",此时直接用该变量代替$F{日期属性}即可