在制作报表的过程中,子表是不可缺少的。今天就研究了一下制作子表的几种方式

一、连接数据库创建子表

以MySQL为例:

我的数据源数据库中的表

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb211emkwODAy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

1)iReport 创建父表

这个就是创建一个新的表格,只是记得数据源要选择mySQL ,其它的数据库数据源也一样的。

2)创建好之后,我们来创建子表,在组件面板找到拖动到父表其中的随意一个地方。我是放到detail里面的

它会产生一个向导

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb211emkwODAy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

一路next下去,仅仅是在最后一项选择use empty datasource,只是选其它的也行,待会我们还要改动

3)说一下原理:这样的方式就是利用每张报表都有的Parameters属性。在iReport4.6中。点击子报表在右側属性栏的最以下有两个属性

一个是Parameters属性,他能够用来向子表传递数据接下来我会说到。第二个是Return Values非常明显这个能够用来将子表的数据返回,这个有时间再说。

以下子表属性进行设置:

有两个属性须要注意。一个是Subreport Expression用来指出子表的路径。这个新建之后一边不须要改动

另外一个是connect type。这个要选择Use a connectionexpress 创建子表时候选择默认值。就是父连接,这个如今不是重点,只是在之后的方式中。这个是非常实用的

以下是重点:

设置点击Parameters打开这样一个窗体,点击add之后

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb211emkwODAy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

这就是你自己定义Parameters的地方。名字能够随便取,我的是例如以下设置:名字是id我要传递给子表的是数据库的ID字段,到此。我们对于主表这边的设置结束

4)以下设置子表这里有一个关键点,就是在子表左边栏Parameters属性这边要新建一个Parameters,右键-》新建名字要和上面我们创建的一样而字段的类型要和从主表传递过来的字段一样:我定义的是id同一时候在我的数据库中定义的ID字段是String类型的。所以是以下设置注意。Default Value Expection一定要设置为“”字符,不然会报错,折腾了我好几个小时

这个设置好之后打开数据连接窗体最左边的小button,打开后使用select语句只是要使用我们自己定义的字段,例如以下图,

你会发现出现了一些属性字段选择加入,就OK啦

我的字段和子表设置

以下是预览结果

OK。创建子表的第一种方式就是这样,假设有须要留邮箱。我把源代码发过去。希望能共同学习

回家了,明天继续写

iReport+jasperreport创建子表的几种方式(1)的更多相关文章

  1. hibernate动态创建数据库表名几种方式

    数据库中数据量很大, 但又不可以删除时同时又要优化程序检索数据时间. 答:方式有很多比如 创建数据库表分区,创建索引, 存储过程等; 我这里采用动态创建数据库表的方式. 完全可以在不创建表分区情况下实 ...

  2. django基础之day09,多对多创建数据表的三种方式

    多对多三种创建方式 1.全自动(用在表关系不复杂的一般情况) class Book(models.Model): title=models.CharField(max_length=32) 多对多关系 ...

  3. T-SQL 循环表的一种方式

    原文来自:https://www.lesg.cn/netdaima/sqlservert-sql/2016-463.html SsqlServer 中循环表有几种方式 1.临时表 2.游标 3-. 下 ...

  4. java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  5. Java反射机制(创建Class对象的三种方式)

    1:了解什么是反射机制? 在通常情况下,如果有一个类,可以通过类创建对象:但是反射就是要求通过一个对象找到一个类的名称:   2:在反射操作中,握住一个核心概念: 一切操作都将使用Object完成,类 ...

  6. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...

  7. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

  8. java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  9. HTML创建文本框的3种方式

    我的第一个随笔,记录主要用来整理学习的知识点 1.input 创建单行文本框 <input type="text" size="10" maxlength ...

随机推荐

  1. react 当中当组件抛出的dom元素最外层不止一个的时候的写法

    在react16当中,对一个组件抛出多个dom进行了支持,写法 以数组形式抛出

  2. redux使用需要注意的地方

    1. react和redux没有直接联系,当react需要结合redux使用的时候,需要引入 react-redux ,该插件提供了connet等方法使得react可以注入redux属性. 2. re ...

  3. BZOJ【1609】 麻烦的聚餐

    609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1198  Solved ...

  4. javaScript防止拦截新窗口打开页面

    原文发布时间为:2009-05-04 -- 来源于本人的百度文章 [由搬家工具导入] 兼容IE.FF.GOOGLE。防止拦截。。。。 <html xmlns="http://www.w ...

  5. Eclipse配置关联Tomcat并运行项目

    打开Eclipse,单击“Window”菜单,选择最下方的“Preferences”. 单击“Server”选项,选择下方的“Runtime Environments”. 点击“Add”添加Tomca ...

  6. sublime text3中成功使用bootstrap3

    在视图这里卡了挺久的,一直是自己在研究.其实自己有一个坏毛病,遇到问题,在网上搜集下找不到便寻求帮助(大多数是求助无效果,因为自己也没搞懂), 这时候自己就会懈怠一会,然后隔一两天心血起伏后便又继续干 ...

  7. 用户找回密码功能JS验证邮箱通过点击下一步隐藏邮箱输入框并修改下一步按钮的ID

    //这里是BaseDao /** * 获得一个对象 * @param hql * @param param * @return */ public Object get(String hql, Obj ...

  8. (6)python tkinter-容器、子窗体

    Frame f = tkinter.Frame(width=380, height=270, bg='white').pack() LabelFrame f = tkinter.LabelFrame( ...

  9. linux 项目管理、服务器管理、服务器维护

    代码打包:tar -zcvf ImOra.3.2.6.tgz --exclude=Public/.htaccess --exclude=Apps/Demo Apps/ Config/ Shell/ L ...

  10. concurrencyProgrammingGuide 1

    thread用来表述执行代码的独立path.os x的线程执行基于POSIX 线程API. process用来表述一个运行操作,可以包含多个线程. task用来描述工作的抽象概念. Concurren ...