此时,设置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;
}
}
//---------------------------------------------------------------------------
|