大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 在动态报表制作中巧用DBGRID

在动态报表制作中巧用DBGRID

时间: 2021-07-31 作者:daque

在delphi中,编制程序职员运用quick report控件不妨简单地安排和实行静态报表,但对动静报表的创造仍有未便之处。如创造一个列表式报表时,怎样动静安排每一列的宽窄?因为报表在预览情景下不许窜改,只能在预览前将宽窄设定好,所以,怎样比拟简单地预先设定宽窄,就成了一个须要处置的题目。 领会题目 开始可想到一种笨方法,即是在决定报表中须要表露的字段后,对每一个字段的宽窄付与一个初始值(比方80),对于须要安排的字段再经过编纂框举行输出窜改。如许简直不妨到达预期手段,但因为不直觉,大概须要屡次安排,感化了功效和简单性。 笔者经过试验,运用dbgrid处置了这个题目。因为是创造与数据库关系的报表,其报表记载确定须要经过一个sql语句来爆发,那么那些记载就不妨先表露在一个dbgrid中。因为dbgrid的各列宽窄不妨动静安排,那么将符合的dbgrid的各列宽窄赋给报表中的各列,就一次性到达了咱们预期的手段,并且操纵特殊简单。 树立窗体 创造两个窗体mainform和repform。在mainform上安置edit1、datasource1、query1、dbgrid1、button1(caption为“索取数据”)和button2(caption为“预览报表”),将datasource1.dataset设定于query1,将dbgrid1的datasource设定于datasource1。在repform上安置quickrep1,并起码将quickrep1.bands.hascolumnband和quickrep1.bands.hasdetailband设为true。 编制程序实行 运转时,在edit第11中学输出精确的 sql语句。点击“索取数据”按钮,将相映记载表露在 dbgrid第11中学。简直的步调代码如次: procedure tmainform.button1click(sender:tobject);   var s:string;   begin    s:=edit1.text;    with query1 do    begin     close;     sql.clear;     sql.add(s);     open;    end;   end; 点击“预览报表”按钮,不妨看到产生的报表,即使对宽窄摆放再有些不合意,不妨封闭预览窗口后从新安排。简直的步调代码如次: procedure tmainform.button2click(sender:tobject); var leftv,i:integer; //leftv为报表开始场所 cheader:tqrlabel; detailtext:tqrdbtext; ……   begin    leftv:=0;    for i:=0 to dbgrid1.columns.count-1 do     begin      cheader:=tqrlabel.create(repform); with repform.cheader do begin parent:=repform.columnheaderband1; caption:=dbgrid1.columns[i].fieldname; width:=dbgrid1.columns[i].width; height:=repform.columnheaderband1.height; left:=leftv+2; top:=5; end; ……//在leftv 处画表格竖线 leftv:=dbgrid1.columns[i].width+leftv; end; ……//画表头栏边框。开始位为0,总宽窄为leftv,也即是dbgrid1的各列宽窄之和 leftv:=0;     //表露记载实质 for i:=0 to dbgrid1.columns.count-1 do begin detailtext:=tqrdbtext.create(repform); with repform.detailtext do begin parent:=repform.detailband1; dataset:=query1; datafield:=dbgrid1.columns[i].fieldname; width:=dbgrid1.columns[i].width; height:=repform.detailband1.height; left:=leftv+2; top:=5; end; ……//在leftv 处画表格竖线 leftv:=dbgrid1.columns[i].width+leftv; end; ……// 画鲜明栏边框。 repform.quickrep1.preview();//报表预览   end; 

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.