private void PrintDomainOnly(DocumentBuilder builder, ReportStudent student, Row template, Table table) { #region 列印領域 UniqueSet <RowHeader> RowIndexs = new UniqueSet <RowHeader>(); #region 列印 RowHeader foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); //如果不包含該學期成績資料,就跳過。 if (!student.SemestersScore.Contains(sysems)) { continue; } SemesterScore semsscore = student.SemestersScore[sysems]; //準備彈性課程的科目(要詳列出來)。 foreach (string strSubject in semsscore.Subject) { SemesterSubjectScore subject = semsscore.Subject[strSubject]; if (DetailDomain.Contains(subject.Domain)) { RowHeader header = new RowHeader(subject.Domain, strSubject); header.IsDomain = false; if (!RowIndexs.Contains(header)) { RowIndexs.Add(header); } } } //準備領域資料。 foreach (string strDomain in semsscore.Domain) { if (!Subj.Domains.Contains(strDomain)) { continue; } SemesterDomainScore domain = semsscore.Domain[strDomain]; if (!DetailDomain.Contains(strDomain)) { RowHeader header = new RowHeader(strDomain, string.Empty); header.IsDomain = true; if (!RowIndexs.Contains(header)) { RowIndexs.Add(header); } } } } List <RowHeader> sortedHeaders = SortHeader(RowIndexs.ToList()); //產生 Row。 List <RowHeader> indexHeaders = new List <RowHeader>(); Row current = template; int rowIndex = 0; foreach (RowHeader header in sortedHeaders) { RowHeader indexH = header; indexH.Index = rowIndex++; indexHeaders.Add(indexH); bool hasGroup = !string.IsNullOrEmpty(Subj.GetDomainGroup(header.Domain)); string groupName = Subj.GetDomainGroup(header.Domain); Row datarow = table.InsertBefore(template.Clone(true), current) as Row; if (header.IsDomain) { string domainCName = header.Domain; string domainEName = Subj.GetDomainEnglish(header.Domain); string domainString = domainCName + (string.IsNullOrEmpty(domainEName) ? "" : domainEName); if (hasGroup) { string gn = groupName; if (groupName == "語文") { gn = "語文\nLanguage"; } datarow.Cells[0].Write(builder, gn); datarow.Cells[1].Write(builder, domainString); } else { datarow.Cells[0].Write(builder, domainString); } } else { string gn = ""; //Additional Classes if (IsFlexible(header.Domain)) { gn = "彈性課程\nAdditional Classes"; } else { gn = header.Domain; } string subjCName = header.Subject; string subjEName = Subj.GetSubjectEnglish(header.Subject); string subjString = header.Subject + (string.IsNullOrEmpty(subjEName) ? "" : "\n" + subjEName); //把空白的領域當成「彈性課程」。 string domain = gn; datarow.Cells[0].Write(builder, domain); datarow.Cells[1].Write(builder, subjString); } } #endregion #region 填資料 //Row RatingRow = null; foreach (RowHeader header in indexHeaders) { SemesterDataCollection semesters = new SemesterDataCollection(); Row row = table.Rows[header.Index + DataRowOffset]; foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); semesters.Add(sysems); if (!student.SemestersScore.Contains(sysems)) { continue; } if (!student.HeaderList.ContainsKey(sysems)) { continue; } int columnIndex = student.HeaderList[sysems]; SemesterScore semsscore = student.SemestersScore[sysems]; decimal?score = null; decimal?weight = null; if (header.IsDomain) { if (semsscore.Domain.Contains(header.Domain)) { score = semsscore.Domain[header.Domain].Value; weight = semsscore.Domain[header.Domain].Weight; } } else { if (semsscore.Subject.Contains(header.Subject)) { score = semsscore.Subject[header.Subject].Value; weight = semsscore.Subject[header.Subject].Weight; } } if (!score.HasValue) { continue; } if (!weight.HasValue) { weight = 0; } if (PrintScore) { row.Cells[columnIndex + 2].Write(builder, score.Value + ""); } else { row.Cells[columnIndex + 2].Write(builder, Util.GetDegreeEnglish(score.Value)); } } } #endregion #region 合併相關欄位。 string previousCellDomain = string.Empty; foreach (RowHeader header in indexHeaders) { bool hasGroup = !string.IsNullOrEmpty(Subj.GetDomainGroup(header.Domain)); string groupName = Subj.GetDomainGroup(header.Domain); Row row = table.Rows[header.Index + DataRowOffset]; if (previousCellDomain == row.Cells[0].ToTxt()) { row.Cells[0].CellFormat.VerticalMerge = CellMerge.Previous; } else { row.Cells[0].CellFormat.VerticalMerge = CellMerge.First; } if (header.IsDomain) { if (!hasGroup) { row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; } } previousCellDomain = row.Cells[0].ToTxt(); } #endregion #endregion }
private void PrintSubjectOnly(DocumentBuilder builder, ReportStudent student, Row template, Table table) { #region 列印科目 UniqueSet <RowHeader> RowIndexs = new UniqueSet <RowHeader>(); #region 列印 RowHeader Dictionary <string, string> subjToDomain = new Dictionary <string, string>(); foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); if (!student.SemestersScore.Contains(sysems)) { continue; } SemesterScore semsscore = student.SemestersScore[sysems]; foreach (string strSubject in semsscore.Subject) { SemesterSubjectScore subject = semsscore.Subject[strSubject]; if (!subjToDomain.ContainsKey(strSubject)) { subjToDomain.Add(strSubject, subject.Domain); } RowHeader header = new RowHeader(subjToDomain[strSubject], strSubject); header.IsDomain = false; if (!RowIndexs.Contains(header)) { RowIndexs.Add(header); } } } List <RowHeader> sortedHeaders = RowIndexs.ToList(); sortedHeaders.Sort(delegate(RowHeader x, RowHeader y) { Subj xx = new JHSchool.Evaluation.Subject(x.Subject, x.Domain); Subj yy = new JHSchool.Evaluation.Subject(y.Subject, y.Domain); return(xx.CompareTo(yy)); }); //產生 Row。 List <RowHeader> indexHeaders = new List <RowHeader>(); Row current = template; int rowIndex = 0; foreach (RowHeader header in sortedHeaders) { RowHeader indexH = header; indexH.Index = rowIndex++; indexHeaders.Add(indexH); Row datarow = table.InsertBefore(template.Clone(true), current) as Row; string gn = ""; //Additional Classes string subjCName = header.Subject; string subjEName = Subj.GetSubjectEnglish(header.Subject); string subjString = header.Subject + (string.IsNullOrEmpty(subjEName) ? "" : " " + subjEName); datarow.Cells[0].Write(builder, subjString); //if (IsFlexible(header.Domain)) //{ // gn = "彈性課程\nAdditional Classes"; // //把空白的領域當成「彈性課程」。 // datarow.Cells[0].Write(builder, gn); // datarow.Cells[1].Write(builder, subjString); //} //else //{ //} } #endregion #region 填資料 //填資料 foreach (RowHeader header in indexHeaders) { SemesterDataCollection semesters = new SemesterDataCollection(); Row row = table.Rows[header.Index + DataRowOffset]; foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); semesters.Add(sysems); if (!student.SemestersScore.Contains(sysems)) { continue; } if (!student.HeaderList.ContainsKey(sysems)) { continue; } int columnIndex = student.HeaderList[sysems]; SemesterScore semsscore = student.SemestersScore[sysems]; decimal?score = null; decimal?weight = null; //if (header.IsDomain) //{ // if (semsscore.Domain.Contains(header.Domain)) // { // score = semsscore.Domain[header.Domain].Value; // weight = semsscore.Domain[header.Domain].Weight; // } //} //else //{ if (semsscore.Subject.Contains(header.Subject)) { score = semsscore.Subject[header.Subject].Value; weight = semsscore.Subject[header.Subject].Weight; } //} if (!score.HasValue) { continue; } if (!weight.HasValue) { weight = 0; } if (PrintScore) { row.Cells[columnIndex + 2].Write(builder, score.Value + ""); } else { row.Cells[columnIndex + 2].Write(builder, Util.GetDegreeEnglish(score.Value)); } } } #endregion #region 合併相關欄位。 string previousCellDomain = string.Empty; foreach (RowHeader header in indexHeaders) { Row row = table.Rows[header.Index + DataRowOffset]; //if (IsFlexible(header.Domain)) //{ // if (previousCellDomain == row.Cells[0].ToTxt()) // row.Cells[0].CellFormat.VerticalMerge = CellMerge.Previous; // else // row.Cells[0].CellFormat.VerticalMerge = CellMerge.First; //} //else { row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; } previousCellDomain = row.Cells[0].ToTxt(); } #endregion #endregion }