⑵ 设置组头QRGroup1的BeforePrint ()事件,用于对不同的组给变量设置初始值及计算课程的开设学年,相关代码如下:
procedure TFormStatisticsReport.QRGroup1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
Var
Year : Integer;
begin
// 计算该课的开设学年,如2005-2006(1)或2005-2006(2)
Year:=FormSearchAchievement.ADODataSet.FieldValues['EntranceYear'];
Year:=Year+(FormSearchAchievement.ADODataSet.FieldValues['Term']-1) Div 2;
QRLabelterm.Caption := IntToStr(Year)+'-'+IntToStr(Year+1)
+'('+IntToStr(((FormSearchAchievement.ADODataSet.FieldValues['Term']+1) Mod 2)+1)+')';
for Year:= 0 to 3 do GroupAverage[Year] := 0; // 四个平均成绩清零
for Year:= 0 to 6 do Scope[Year] := 0; // 六档成绩计数清零
NumCount := 0; // 该组总人数清零
end;
⑶ 因该组中的每个学生都要显示其相关成绩,所以通过设置细节带DetailBand1的AfterPrint ()事件,计算各种成绩累加及对各档成绩的人数进行统计,相关代码如下:
procedure TFormStatisticsReport.DetailBand1AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
var
i : Integer;
begin
with FormSearchAchievement do begin // 总评成绩累加
GroupAverage[0]:=GroupAverage[0]+ADODataSet.FieldValues['Achievement'];
for i:= 1 to 3 do // 平时、期中和期末成绩累加
GroupAverage[i]:=GroupAverage[i]+ADODataSet.FieldValues['Achievement'+IntToStr(i)];
Inc(NumCount); // 该组总人数加1
i:=Round(ADODataSet.FieldValues['Achievement']) Div 10; // 成绩档次(0-10)
if (i<6) then
Inc(Scope[0]) // 不及格人数加1
else
Inc(Scope[i-5]); // 其它相应档人数加1
end;
end;
|