运行过程中动态控制报表的格式及数据(200分)

  • 主题发起人 主题发起人 charlie7407
  • 开始时间 开始时间
C

charlie7407

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,我想在程序运行过程中动态控制报表的格式及数据,类似WORD报表中可以任意
添加删除格线,改变显示字段,请问如何实现?
多谢指教!!!!!!!
e-mail:charlie7407@21cn.com
u800358@gracethw.com.tw
 
可以运行中编辑的报表控件很多啊:ReportBuild、QRDesign、FastReport... ...
挑一个用吧
 
自已做一个类似Qreport 的窗口(不用Qreport控件),如画线用Tshape,并把操作存起来,
然后用程序创建TQrshape,并设置属性,创建完后就可预览
 
这些控件那里有下阿
告诉我把
谢谢
 
DELPHI俱乐部http://www.wapsec.com.cn
DELPHI大师等
 
看看以下程序包你可以成功实现
现在TQuickReport中加几个带区(用以下方式生成也可以)
procedure TQuickReport1.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
var
i,iStep:integer;
iPos:integer;
myLabel: TQRLabel;
myText: TQRDBText;
myLine1: TQRShape;
myLine2: TQRShape;
mm:do
uble;
begin
mastertable.Active := true;
iStep := 4;
iPos := 1;
QuickReport1.ReportTitle := mastertable.TableName ;
QuickReport1.Page.Orientation := poLandscape ;
for i:= 0 to mastertable.FieldDefs.Count-1do
begin
myLabel := TQRLabel.Create(self);
myText := TQRDBText.Create(self);
myLine1 := TQRShape.Create(self);
myLine2 := TQRShape.Create(self);
myLabel.Caption := mastertable.FieldDefs.Items.Name ;
myText.DataSet := mastertable;
myText.DataField := mastertable.FieldDefs.Items.Name ;
myText.parent := oDetailBand;
myLabel.Parent := oColumnHeaderBand;
myLine1.Parent := oColumnHeaderBand;
myLine2.parent := oDetailBand;
myLabel.AutoSize := true;
myText.AutoSize := false;
myText.WordWrap := false;
myText.AutoStretch := true;
myLine1.Top := 0;
myLine1.Left := iPos ;
myLine1.Width := 1;
myLine1.Height := oColumnHeaderBand.Height + 2;
myLine2.Top := 0;
myLine2.Left := iPos ;
myLine2.Width := 1;
mm:=int(QuickReport1.Page.Length);
myLine2.Height := 1000;
//oDetailBand.Height;
iPos := iPos + iStep;
myText.top := iStep;
myLabel.Top := iStep;
myText.Left := iPos;
myLabel.Left := iPos;
myText.Width := 9 * length(myLabel.Caption);
myText.AlignToBand := false;
myText.WordWrap := true;
myText.AutoStretch := true;
iPos := iPos + (9 * length(myLabel.Caption));
end;
myLine1 := TQRShape.Create(self);
myLine1.Parent := oColumnHeaderBand;
myLine1.Top := 0;
myLine1.Left := iPos ;
myLine1.Width := 1;
myLine1.Height := oColumnHeaderBand.Height + 2;
myLine2 := TQRShape.Create(self);
myLine2.parent := oDetailBand;
myLine2.Top := 0;
myLine2.Left := iPos ;
myLine2.Width := 1;
myLine2.Height := 1000;//oDetailBand.Height;
myLine1 := TQRShape.Create(self);
myLine2 := TQRShape.Create(self);
myLine1.Parent := oColumnHeaderBand;
myLine1.Top := 0;
myLine1.Left := 1 ;
myLine1.Width := iPos;
myLine1.Height := 1;
myLine2.parent := oDetailBand;
myLine2.Top := -1;
myLine2.Left := 1 ;
myLine2.Width := iPos;
myLine2.Height := 1;
myLine1 := TQRShape.Create(self);
myLine1.Parent := oPageFooterBand;
myLine1.Top := -1;
myLine1.Left := 1 ;
myLine1.Width := iPos;
myLine1.Height := 1;
end;

可以吗,我就是这么成功的
 
“ 动态控制报表的格式及数据 ”
1、先在QuickRep设定所有字段的表格。

2、运行时在另一窗口中选定要显示的字段。

3、根据字段名的宽(或数据的最大宽), 确定QRShape,QRDBText,QRLabel的宽。及Left值。
没有选中的字段,QRShape,QRDBText,QRLabel宽为0。调整Left值。

4、还可以动态设定纸张大小等。效果更好。
代码不会太难,就是烦琐了点。我就是这样做的,试试吧!
 
多人接受答案了。
 
后退
顶部