近期项目一个需求,需要对子表中多个相同id的记录只展示一个主表的记录。
效果如下:
一个PO、TITLE、ISBN(以下简称PO)代表一条子表的记录,而底下的N.W、MEAS、PLT SIZE(以下简称N.W)则是代表其主表的记录,已知,所有的PO都会有一个N.W,所以你在jasper的detail里书写是,每一条PO都会产生一个N.W依附在下面,就无法实现我们需要的多个相同id的PO只展示同一个N.W,那么这时我们就需要用到函数对子表的id进行缓存。
首先我们创建一个函数previous_mark_id,类型设置为Integer,或者你的id是string类型就设置为string,随后把Increment type选择为Report,计算类型不需要变动,默认即可
随后我们需要创建Group,选中判断是否为同一子表的id,点击下一步创建所需的Header或Footer
把mark_id传入该Group组内,那么该组就会通过这个mark_id进行缓存记录这一个mark_id,最后我们在组内创建需要的Field或StaticText,在Print When Expression中写入把这个mark_id与我们的函数previous_mark_id进行判断,当$F{mark_id}!=$V{previous_mark_id}时,子表所对应的主表记录即可展示,反之不出现。
还有不懂的可以问我哦,我是寻狗师。