会打印的大侠请帮忙看看!我的同事用pb轻松做出来了,难道delphi真的不如pb,还是我的水平不行!!! (100分)

  • 主题发起人 主题发起人 xiaoxiami2
  • 开始时间 开始时间
qr的qrgroup 控件
 
karxios大侠:
教教我怎么用吧,我快及疯了!
 
最简单的方法是用reportbuilder来作打印。将对应“部门”的ppdbtext的
suppressRepeatedValue(压缩重复数据)属性置为true即可。
当然用quickreport的qrgroup也可。将“部门”子段放在qrgroup中。
 
以部门排序,用RM旧版的话,加一点脚本控制,用新版的话,上下格合并。
不过WHF,我上次建议的交叉报表左边那些非交叉字段的标题显示的问题最好能解决,
并且统计或总计栏希望可自定义,并可选择同时合计+平均+。。。
总之,可以同时显示每一列,包括交叉和非交叉列的各种计算值,这样,就与数据窗口差不多了。
 
QuickReport 里是这样的,
一个ADODataSet ,
CommandText :='select 姓名,年龄,id,部门 from Table order by 部门,id ‘
加一个 QRGroup,在加一个QRBand 它的Type 设成 rbDetail
QRGroup 的 expression 里选择 部门。
在QRGroup 里加入 部门的字段。
在GRBand 里加别的字段。
应该可以了吧。

 
Puma Wang大侠:
谢谢,现在显示是这样的:
部门 姓名 年龄
人事部
刘德华 25
张学友 24
张柏芝 11
生产部
黎明 18
郭富城 19
郑秀文 55
总算好多了,如果人事部和生产部两个名称能降一位就好了!
 
你把Delphi自带的Demo研究一下,打印总共只有两个Demo,都有分组打印,
以及分组统计(最实用,你的例子没用到),
顺便说一声,几年前我也是PB程序员,但从用了Delphi后从来没回去过
 
>>如果人事部和生产部两个名称能降一位就好了!
呵呵,要举一反三嘛,在Puma Wang大侠的基础上再如下做:
在QRGroup中把别的字段也加上,在afterprint事件中:
query1.next;
试试看吧!
 
to liuly大侠:
结果是这样的:
部门 姓名 年龄
人事部 刘德华 25
生产部 张学友 22
 
看看Delphi自带的QuickRep的Demo,很容易就可以实现你的要求。
 
我记得有位朋友说在Foxpro中可以通过实例名用宏直接引用实例,而Delphi中没有,所以得出了Delphi不如Foxpro的结论!
 
是的.delphi 的例子可以实现
 
你试一下如下:在分组的基础上,把GROUP中的称设为ENABLE,然后在明细条中加一个QRLABEL,并在
该LABEL的ONPRINT中把CAPTION:设为GROUP中的LAVEL的CAPTION,并加入一个只打印一次的标记,这样就行了。
部门 姓名 年龄
人事部 刘德华 25
张学友 24
张柏芝 11
生产部 黎明 18
郭富城 19
郑秀文 55
 
xiaoxiami2:
刚刚试验了一次,我说的是可行的,不知道是否你哪里设置不对?
告诉我你的Email,我给你个例子看看。
 
用FastReport在分组头中选择部门字段,然后在主项数据中加入部门字段,并点鼠标右键
选择压缩重复值,即可实现。
 
看看DELPHI的DEMO就可以解决了。
 
我的email:
soft@clsoft.net
 
用FastReport在分组头中选择部门字段,然后在主项数据中加入部门字段,并点鼠标右键
选择压缩重复值,即可实现。你试一试100%成功,而且特简单!!!呵呵。
 
另一个办法:
用adoquery,属性locktype 设为ltBatchOptimistic
再看看下面的代码。OK!
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
begin
with q1do
begin
DisableControls;
First;
While not eofdo
begin
if s=Fieldbyname('部门').AsString then
begin
Edit;
Fieldbyname('部门').Value:='';
Post;
end
else
s:=Fieldbyname('部门').AsString;
Next;
end;
enableControls;
end;
 
后退
顶部