用第三方控件就用FastReport吧,使用代码动态建立报表
....
frmRpt.frRptSmt.Pages.Clear;
frmRpt.frRptSmt.Pages.Add;
// 建立报表页
Page := frmRpt.frRptSmt.Pages[0];
b:= TfrBandView(frCreateObject(gtBand, ''));
// 页首Band
b.SetBounds(0, 20, 0, 20);
b.BandType := btPageHeader;
Page.Objects.Add(b);
v := frCreateObject(gtMemo, '');
// 页首Band上的标题Memo
v.SetBounds(20, 20, 150, 16);
v.FrameTyp:=15;
v.FrameWidth:=1;
v.BandAlign:=baCenter;
v.Memo.Add('加入页标题');
Page.Objects.Add(v);
b := TfrBandView(frCreateObject(gtBand, ''));
// 主数据 band
b.SetBounds(0, 60, 0, ColHg);
b.Columns:=4;
b.ColumnWidth:=ColWd;
b.ColumnGap:=0;
b.BandType := btMasterData;
Page.Objects.Add(b);
v := frCreateObject(gtMemo, '');
// 主数据 band上的数据Memo
v.SetBounds(20, 60, ColWd, ColHg);
//colwd ColHg是列的宽度和高窟
v.FrameWidth:=1;
v.FrameTyp:=15;
v.Memo.Add('[dmMain.adoqryFrame."CrName"]');
Page.Objects.Add(v);
v := frCreateObject(gtMemo, '');
// 主数据 band上的数据
v.SetBounds(20, 60, ColWd, HgDiv3);
v.Memo.Add('[dmMain.adoqryFrame."Port"]');
Page.Objects.Add(v);