我使用fastreport打印stringgrid中的数据,stringgrid的第0列显示的项目代码,通常情况下相同的项目代码只显示一次,如果一个项目在一页没有显示完,那么在下一页显示的第一行要显示该项目的代码。显示另一个项目时要重新换页,即强制换页,请问如何实现?
项目代码  项目名称  ----- 备注
1         abc        ---      第一条记录
          abc        ------   第2条记录
          abc       ----------第3条记录
---------------------------------------//下一页数据
1         abc        ------   第4条记录
          abc        ------   第5条记录
          abc       ----------第6条记录
          abc        ------   第7条记录
          abc       ----------第8条记录
下面要显示的是第2个项目所以要强制换页
2         ddd        -----    第一条记录 
问题:
1,如何在每一页的第一行的项目代码显示该项目的代码。
2、在哪个事件中强制分页?
请各位高手帮忙

解决方案 »

  1.   

    1、用变量赋值
    2、MASTERBAND的BEFOREPRINT事件中分页
      

  2.   

    手工设计fast reprot方法
    报表窗口如下
    frdbdataset1 fr数据源 dataset设置为要显示的数据集
    frreport1    fr报表    
    报表的的设计如下
    band1,报表标题
    band2,主项数据无数据源 
    band3,主项数据 数据源为frdbdataset1
    band4,栏目脚,用于显示合计数据
    band5,子栏  ,用于不足行时补写空白行
    procedure TForm1.frReport1ManualBuild(Sender: TfrPage);
    //在frreport1中的onmanualbuild事件中手工设置报表项
    var
      i, j,k: Integer;
    begin k:=trunc(frdbdataset1.DataSet.RecordCount/8);
                 //每页显示8行(行数可用变量),计算页数
      Sender.ShowBandByType(btReportTitle); //显示报表标题
      for i := 0 to k do      //循环打印每页
      begin
        Sender.ShowBandByName('Band2');
                //显示列头 (band2是一个主项数据,无数据源)
        for j := 1 to 8 do    //循环打印每行
          begin
          if not frdbdataset1.Eof then
          begin
          Sender.ShowBandByName('Band3');
                  //显示主项数据 (band3是主项数据,数据源为frdbdataset1)
          frdbdataset1.Next;   //显示下一条数据
          end
          else
          sender.ShowBandByName('band5'); //显示空白行  (band5为child band)
          end ;
         //在实际的页面设计当中此处有一个栏目脚band 以显示合计
        if i <> k then
          Sender.NewPage;    //产生新页面
      end;
    end;
      

  3.   

    if 字段值符合條件 then
    fastrep1.NewPage; //产生新页面可參考你的程式,應該寫在
    DetailBand1BeforePrint事件
    里可以。哈哈