我做了一个户籍管理系统,例如一家人,有好几口人,怎么样才能把它打在一个报表上,报表我已经设计好了,但不知道如何才能循环取数,我只会取一个,不知道怎样才能多取啊。
如上图:姓名1.姓名2,姓名3,
性别1,性别2,性别3...
每页取三组数据,大于三组的放入下一页。。求急啊,我找了很多都没有找到相关的贴子。
如上图:姓名1.姓名2,姓名3,
性别1,性别2,性别3...
每页取三组数据,大于三组的放入下一页。。求急啊,我找了很多都没有找到相关的贴子。
在你初步设计要打印的样式上想点办法后面就没那么辛苦了,这个图上是把每个户主所在的家庭成员横向打印且每页只能打印3个人员名字,
何不改成 丛向打印方式:
户主1 姓名1 性别 出生年月...
户主1 姓名2 性别 出生年月...
户主1 姓名3 性别 出生年月...
...
如:
意见仅供参考.
ex: 户主 姓名 性别 出生年月 ...
1. 001 张三 男 1990.1.1 ...
2. 001 李四 女 1980.1.1 ...
3. 001 王五 男 1970.1.1 ...
把你之前姓名横向的改成纵向,把你之前出生年月\住址\兵役\血型...等纵向的改成横向,与你数据记录一样,这样按户主分组,要显示的画在 masterdata里面就好了
我是说DetailData1中的bank绑定数据后可不可横向显示。
它默认的是纵向显示的。。有没有方法可以改变他是显示方向
我要横向显示
你的意思是换行就换页是吧?在报表里面写脚本,自己计数,显示三个就换一页。在MasterDate 添加 OnAfterPrint,var
i: integer;
// MasterDate 的 OnAfterPrint
procedure Band4OnAfterPrint(Sender: TfrxComponent);
begin
if (i mod 3) = 0 then begin
Engine.NewPage();
i:= 1;
end
else
inc(i);
end;
begin
i:= 1;
end.代码仅供参考,希望能给你提供一个思路
按你的方法,我实现了上面的要求,但是band中放入标签以后,标签就会随绑定的数据一起循环
例如:姓名:band xm.
他的显示结果是:姓名:姓名张三,姓名李四,姓名王五。能有不让memo不循环的方法么?
针对MasterData 的属性Columns 设置为3,属性Columnwidth自己根跟你的表格调整一下大小.
触发MasterData 的事件:
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
memo2.suppressrepeated:=true;
if (<line> mod 4) = 0 then
begin
Engine.NewPage();
memo2.suppressrepeated:=false;
end
end;
处理了如上面的"姓名"重复打印的问题,注:上面的memo2.text="姓名";
1、我用了masterdata 绑定是的户主信息,detaildata 绑定的家庭成员的信息。2、我在detaildata 的beforeprint 中写了
procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
memo13.suppressrepeated:=true;
if ( <line> mod 4) = 0 then
begin
Engine.NewPage();
memo13.suppressrepeated:=false;
end
end;memo13就是姓名标签。3、但是写代码以后,第一页是好的,但是第二页的排列方式出了问题,请大家看看图片,问题出在哪里?第二页
http://album.hi.csdn.net/app_uploads/hrc_evollj/20081031/151940738.p.jpg?d=20081031152447208
fastreport 非常强大,
建议参看一下他的Demo。你这个情况我觉得还可以用 Side by side subreports形式。他的形式是左右两个子报表,左边是户主别名这些标签,右边是三列数据。
然后自己控制换行。
现在我根据大家的方法已经实现的差不多了。
只用一个masterdata不能实现,我就加了一个detaildata来绑定明细数据。
但当我在detaildata的beforeprint事件写上分页代码以后。
第一页的数据排列是好的,但是下面的时候就乱了
大概说一下:1、按照我的理解,应该是三列,而不是四列,应该把【户主关系】【姓名】【别名】和相应的字段 作为一个列,只是后面两列里面不再显示【户主关系】这些;2、通过调整 ColumnGap 为负数,让三个列存在一定的重叠,以此消除不显示【户主关系】这些带来的定位差;3、为了实现第2、3列隐藏【户主关系】,在Band的OnBeforePrint 事件中增加如下内容procedure Band4OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i:= <line> - 1;
if (i mod 3)=0 then begin
Memo2.Visible:= true;
end
else
Memo2.Visible:= false;
end;
4、结合之前的换页方法,应该能实现你的需求。
我不知道说的分页到是在哪里写的?你是masterdata中的beforeprint中写的么?
如果是,分页是不成功的。
masterdata我是用来绑定主数据的,而detaildata是用来绑定明细数据的。这样不可行么?
例如我数据库中有这样的记录
Hh(户号) Hb 户别 Xm 姓名 Hzgx 户主关系
001 普通 张三 户主
001 普通 李四 长子
001 普通 王五 次子
001 普通 赵花 长女
001 普通 小红 次女
请问如果数据库有这样五条记录,应该怎样取出来,并排列成上图的报表样式呢?
只用一个masterdata,我没有做出来,就用masterdata绑定户主,再用detaildata绑定家庭成员的信息。
这样做不行么?
我发一个,让大家一起研究一下。。谢谢了。。
邮件:[email protected]
请把数据库备份出来或者导入access里面