/// <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;
        }