/// <summary> /// 按科目組織排名資料。 /// </summary> /// <param name="selectedsubjs">科目名稱->RankData</param> /// <returns></returns> private Dictionary <string, RankData> ArrangeBySubject(Dictionary <string, decimal> selectedsubjs) { Dictionary <string, RankData> ranks = new Dictionary <string, RankData>(); foreach (RSemesterScore semsscore in SemesterScores.ForBy(SelectedSchoolYear, SelectedSemester)) { foreach (RSubjectScore subjscore in semsscore.Subjects) { //不在科目清單中就跳過。 if (!selectedsubjs.ContainsKey(subjscore.Name)) { continue; } //「排名」不存在就新增。 if (!ranks.ContainsKey(subjscore.Name)) { ranks.Add(subjscore.Name, new RankData()); ranks[subjscore.Name].Name = subjscore.Name; } RankData rank = ranks[subjscore.Name]; //將學生成績加入到排名資料中。 if (!rank.ContainsKey(semsscore.RefStudentID)) { rank.Add(semsscore.RefStudentID, new RankScore(subjscore.GetScoreOrDefault(0), null)); } else { throw new ArgumentException("學生有重覆的學期成績(資料異常!)。"); } } } return(ranks); }
private void LoadItems() { dgv.Rows.Clear(); _initialized = false; if (Type.Equals("Semester")) { if (Category.Equals("Subject")) { #region 讀取學期成績科目 Dictionary <string, int> subjects = new Dictionary <string, int>(); foreach (RStudentRecord student in Students) { foreach (RSemesterScore semsscore in SemesterScores.ForBy(student.ID, SelectedSchoolYear, SelectedSemester)) { foreach (RSubjectScore subjscore in semsscore.Subjects) { if (!subjects.ContainsKey(subjscore.Name)) { subjects.Add(subjscore.Name, 0); } subjects[subjscore.Name]++; } } } foreach (string subject in subjects.Keys) { DataGridViewRow row = new DataGridViewRow(); row.CreateCells(dgv, false, 1, subject, subjects[subject]); dgv.Rows.Add(row); } #endregion } else if (Category.Equals("Domain")) { #region 讀取學期成績領域 Dictionary <string, int> domains = new Dictionary <string, int>(); Dictionary <string, List <decimal> > periods = new Dictionary <string, List <decimal> >(); foreach (RStudentRecord student in Students) { foreach (RSemesterScore record in SemesterScores.ForBy(student.ID, SelectedSchoolYear, SelectedSemester)) { foreach (RDomainScore domain in record.Domains) { if (!domains.ContainsKey(domain.Name)) { domains.Add(domain.Name, 0); } domains[domain.Name]++; } } } foreach (string domain in domains.Keys) { DataGridViewRow row = new DataGridViewRow(); row.CreateCells(dgv, false, 1, domain, domains[domain]); dgv.Rows.Add(row); } #endregion } } _initialized = true; }