我在程序中只是加入了报表控件,其他都是通过代码写的报表数据,里面用到了FOR循环,但是打印却不能打印多页,怎么回是?还需要在哪里设置吗?部分代码如下:
frReport1.Pages.Clear;
frReport1.Pages.Add; // create page
Page := frReport1.Pages[0]; b := TfrBandView.Create; // create Title band
b.SetBounds(0, 20, 0, 20); // position and size in pixels
b.BandType := btReportTitle;
Page.Objects.Add(b); iCount := lv_count.Items.Count ;
for i := 0 to iCount - 1 do
begin
list := lv_count.Items[i] ;
v := TfrMemoView.Create; // create data field
v.SetBounds(20, 80+(i*30), 500, 16);
v.Memo.Add(list.Caption);
Page.Objects.Add(v); v := TfrMemoView.Create; // create data field
v.SetBounds(170, 80+(i*30), 200, 16);
v.Memo.Add(list.SubItems.Strings[0]);
Page.Objects.Add(v); v := TfrMemoView.Create; // create data field
v.SetBounds(290, 80+(i*30), 200, 16);
v.Memo.Add(list.SubItems.Strings[1]);
Page.Objects.Add(v);
end
frReport1.Pages.Clear;
frReport1.Pages.Add; // create page
Page := frReport1.Pages[0]; b := TfrBandView.Create; // create Title band
b.SetBounds(0, 20, 0, 20); // position and size in pixels
b.BandType := btReportTitle;
Page.Objects.Add(b); iCount := lv_count.Items.Count ;
for i := 0 to iCount - 1 do
begin
list := lv_count.Items[i] ;
v := TfrMemoView.Create; // create data field
v.SetBounds(20, 80+(i*30), 500, 16);
v.Memo.Add(list.Caption);
Page.Objects.Add(v); v := TfrMemoView.Create; // create data field
v.SetBounds(170, 80+(i*30), 200, 16);
v.Memo.Add(list.SubItems.Strings[0]);
Page.Objects.Add(v); v := TfrMemoView.Create; // create data field
v.SetBounds(290, 80+(i*30), 200, 16);
v.Memo.Add(list.SubItems.Strings[1]);
Page.Objects.Add(v);
end
你用循环只会在一页内一直向下加TfrMemoView,超过一页,它自然打印不出来。其实你可以转换一下思想, 把 lv_count 中的值放到一个临时数据表中,
然后在报表中增加一个MasterData1:TfrBandView;设置其DataSource与临时表的数据集关联,
不需要用循环即可以实现!请楼主按这种方法试试!