bcb复杂报表

     阅读 477 次    更新时间:2014/4/18    
此时,设置QuickReport的数据源为Query_Report,

此时,设置QuickReport的数据源为Query_Report,

//首先打印QRGroup1栏中的数据
QRGroup1->Expression="Term"; //分组条件
QRExpr1->Expression=COPY(Term,1,4) ;  //起始学年
QRExpr3->Expression=COPY(Term,6,1)   //第几学期,学期格式为YYYY.1或YYYY.2
//终止学年
void __fastcall TReportForm_AllScore::QRExpr1Print(TObject *sender,
      AnsiString &Value)
{
       EndYear->Caption=Value.ToInt()+1;
}
在QRBand1(DetailBand)的BeforePrint()事件中控制数据源,从而实现分组水平方向的多列报表,这点非常重要,
void __fastcall TReportForm_AllScore::QRBand1BeforePrint(
      TQRCustomBand *Sender, bool &PrintBand)
{
       AnsiString Term;
//初始化,QRLable->Caption=""
       {
                A21->Caption="";
                A22->Caption="";
                A23->Caption="";
                A24->Caption="";
                A25->Caption="";
                A26->Caption="";
                //-------------------------------
                A31->Caption="";
                A32->Caption="";
                A33->Caption="";
                A34->Caption="";
                A35->Caption="";
                A36->Caption="";
                //-------------------------------
                A41->Caption="";
                A42->Caption="";
                A43->Caption="";
                A44->Caption="";
                A45->Caption="";
                A46->Caption="";
       }
       Term=Query_Report->FieldByName("Term")->AsString;
       {
          A11->Caption=Query_Report->FieldByName("Course")->AsString;
              A12->Caption=Query_Report->FieldByName("CourseRequire")->AsString;                A13->Caption=Query_Report->FieldByName("CreditHour")->AsString;
          A14->Caption=Query_Report->FieldByName("Score")->AsString;
          A15->Caption=Query_Report->FieldByName("FirstScore")->AsString;
              A16->Caption=Query_Report->FieldByName("SecondScore")->AsString;
       }
       // the second column
       Query_Report->Next();
       if(Query_Report->Eof)
            return;
       //若是同一组,则继续水平方向打印     
       if(Query_Report->FieldByName("Term")->AsString==Term)
       {
          A21->Caption=Query_Report->FieldByName("Course")->AsString;
              A22->Caption=Query_Report->FieldByName("CourseRequire")->AsString;                A23->Caption=Query_Report->FieldByName("CreditHour")->AsString;
          A24->Caption=Query_Report->FieldByName("Score")->AsString;
          A25->Caption=Query_Report->FieldByName("FirstScore")->AsString;
              A26->Caption=Query_Report->FieldByName("SecondScore")->AsString;
       }
       //若不是同一组,移向上一条记录,并返回;
       //因为打印下一个Detail Band,Query会自动指向下一条记录
       //这是控制数据源操作的一个技巧,理解报表的输出过程不难理解此语句
       else
       {
          Query_Report->Prior();
          return;
       }
       // the third column
       Query_Report->Next();
       if(Query_Report->Eof)
            return;
       if(Query_Report->FieldByName("Term")->AsString==Term)
       {
          A31->Caption=Query_Report->FieldByName("Course")->AsString;
              A32->Caption=Query_Report->FieldByName("CourseRequire")->AsString;                A33->Caption=Query_Report->FieldByName("CreditHour")->AsString;
          A34->Caption=Query_Report->FieldByName("Score")->AsString;
          A35->Caption=Query_Report->FieldByName("FirstScore")->AsString;
              A36->Caption=Query_Report->FieldByName("SecondScore")->AsString;
       }
       else
       {
          Query_Report->Prior();
          return;
       }
       // the fourth column
       Query_Report->Next();
       if(Query_Report->Eof)
            return;
       if(Query_Report->FieldByName("Term")->AsString==Term)
       {
          A41->Caption=Query_Report->FieldByName("Course")->AsString;
              A42->Caption=Query_Report->FieldByName("CourseRequire")->AsString;                A43->Caption=Query_Report->FieldByName("CreditHour")->AsString;
          A44->Caption=Query_Report->FieldByName("Score")->AsString;
          A45->Caption=Query_Report->FieldByName("FirstScore")->AsString;
              A46->Caption=Query_Report->FieldByName("SecondScore")->AsString;
       }
       else
       {
          Query_Report->Prior();
          return;
       }
}
//---------------------------------------------------------------------------
 
 

Copyright 2003-2008 All Rights Reserved 自由风工作室 版权没有 [湘ICP备06002185号]
.