public FormSemestersRating() : base() { InitializeComponent(); SemesterScores = new List <JHSemesterScoreRecord>(); SemesterHistory = new HistoryQuery(new List <JHSemesterHistoryRecord>()); // TODO: 特教改 //NameMapping.Add("語文", "語文"); //NameMapping.Add("數學", "數學"); //NameMapping.Add("社會", "社會"); //NameMapping.Add("自然與生活科技", "自然與生活科技"); //NameMapping.Add("藝術與人文", "藝術與人文"); //NameMapping.Add("健康與體育", "健康與體育"); //NameMapping.Add("綜合活動", "綜合活動"); foreach (string domain in Domain.SelectGeneral()) { NameMapping.Add(domain, domain); } foreach (string domain in Domain.SelectSpecial()) { NameMapping.Add(domain, domain); } NameMapping.Add("學習領域", "學習領域"); NameMapping.Add("課程學習", "課程學習"); }
protected override void PrepareDataBackground() { JHClass.RemoveAll(); RatingStudent.SetClassMapping(JHClass.SelectAll()); //快取班級對照資訊。 Dictionary <string, RatingStudent> dicstuds = Students.ToDictionary(); //學期歷程查詢類別。 SemesterHistory = new HistoryQuery(JHSemesterHistory.SelectByStudentIDs(Students.ToKeys())); //將學生的成績清除。 foreach (RatingStudent each in Students) { each.Clear(); } foreach (JHSemesterScoreRecord semsRecord in SemesterScores) { RatingStudent student; if (!dicstuds.TryGetValue(semsRecord.RefStudentID, out student)) { continue; //找不到該學生。 } ScoreCollection subjScores = null, domainScores = null; if (SemesterHistory.Contains(semsRecord.RefStudentID, semsRecord.SchoolYear, semsRecord.Semester)) { //tokne 意思是特定學期的識別字串,例如「一上」。 string token = SemesterHistory.GetToken(semsRecord.RefStudentID, semsRecord.SchoolYear, semsRecord.Semester); //不在使用者選擇的學期中,就不處理。 if (!Tokens.Contains(token)) { continue; } if (!student.Scores.Contains(ScoreType.Subject.Regulation(token))) //如果學生不包含該學期的成績,就加上該學期。 { student.Scores.Add(ScoreType.Subject.Regulation(token), new ScoreCollection()); } if (!student.Scores.Contains(ScoreType.Domain.Regulation(token))) //如果學生不包含該學期的成績,就加上該學期。 { student.Scores.Add(ScoreType.Domain.Regulation(token), new ScoreCollection()); } subjScores = student.Scores[ScoreType.Subject.Regulation(token)]; domainScores = student.Scores[ScoreType.Domain.Regulation(token)]; } else { continue; //沒有該學期的學期歷程就不處理。 } #region 科目 foreach (K12.Data.SubjectScore subjRecord in semsRecord.Subjects.Values) { if (!subjRecord.Score.HasValue) { continue; //沒有成績就不處理。 } ScoreItem subject = new ScoreItem(subjRecord.Subject, ScoreType.Subject); if (!SelectedItems.Contains(subject)) { continue; //不在處理的科目清單中。 } if (subjScores.Contains(subject.Name)) { throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", student.Name, subject.Name)); } subjScores.Add(subject.Name, subjRecord.Score.Value); } #endregion #region 領域 foreach (K12.Data.DomainScore domainRecord in semsRecord.Domains.Values) { if (!domainRecord.Score.HasValue) { continue; //沒有成績就不處理。 } ScoreItem domain = new ScoreItem(domainRecord.Domain, ScoreType.Domain); if (!SelectedItems.Contains(domain)) { continue; //不在處理的領域清單中。 } if (domainScores.Contains(domain.Name)) { throw new ArgumentException(string.Format("學生「{0}」在{1}學年第{2}學期「{3}」領域成績出現一次以上。", student.Name, domainRecord.SchoolYear, domainRecord.Semester, domain.Name)); } domainScores.Add(domain.Name, domainRecord.Score.Value); } if (semsRecord.LearnDomainScore.HasValue) { domainScores.Add("學習領域", semsRecord.LearnDomainScore.Value); } if (semsRecord.CourseLearnScore.HasValue) { domainScores.Add("課程學習", semsRecord.CourseLearnScore.Value); } #endregion } }