private void btnSave_Click(object sender, EventArgs e) { config.PrintItems.Clear(); foreach (Control eachCtl in gpItem.Controls) { if (!(eachCtl is CheckBox)) { continue; } if ((eachCtl as CheckBox).Checked) { config.PrintItems.Add(eachCtl.Text); } } config.RankMethod = string.Empty; foreach (Control eachCtl in gpRank.Controls) { if (!(eachCtl is RadioButton)) { continue; } if ((eachCtl as RadioButton).Checked) { config.RankMethod = eachCtl.Text; } } if (rbA4.Checked) { config.PaperSize = "A4"; } else { config.PaperSize = "B4"; } config.Save(); DialogResult = DialogResult.OK; }
private void btnPrint_Click(object sender, EventArgs e) { MsgBox.Show("請注意: 本成績單包含所有學生學期成績及排名,僅供校內教師參考使用,請勿公佈或發放與學生。", "注意", MessageBoxButtons.OK, MessageBoxIcon.Warning); List <string> selectedSubjects = lvSubject.GetSelectedItems(); List <string> selectedSubjectsM = lvSubject.GetSelectedItemsM(); List <string> selectedDomains = lvDomain.GetSelectedItems(); List <string> selectedDomainsM = lvDomain.GetSelectedItemsM(); #region 檢查選擇的科目、領域是否合理。 //if ((selectedSubjects.Count + selectedDomains.Count + Perference.PrintItems.Count) > Report.ScoreHeaderCount) int ScoreHeaderCount = (Perference.PaperSize == "B4") ? 32 : 18; if ((selectedSubjects.Count + selectedDomains.Count + Perference.PrintItems.Count) > ScoreHeaderCount) { MsgBox.Show("選擇的成績項目超過,無法列印報表。"); return; } #endregion Perference.ReScoreMark = txtReMark.Text; Perference.UserSelScoreType = cbxScoreType.Text; Perference.Save(); #region 重設計算資料 foreach (ReportStudent each in AllStudents) { each.Scores[Utilities.SummaryToken].Clear(); each.Places.Clear(); each.Places.NS("班排名").Clear(); each.Places.NS("年排名").Clear(); } #endregion #region 計算各類成績。 ScoreCalculatorP calculator = new ScoreCalculatorP(2, Utilities.SummaryToken); calculator.Subjects = selectedSubjects; calculator.Domains = selectedDomains; if (checkBoxX1.Checked) { //20210721 要求彈性課程領域不列入計算 //2022-02-19 高雄專案[1110205]要求改為「只將八大領域列入計算」 calculator.Subjects = selectedSubjectsM; calculator.Domains = selectedDomainsM; } foreach (ReportStudent each in AllStudents) { calculator.CalculateScore(each); } #endregion #region 計算排名。 List <RatingScope <ReportStudent> > classScopes = AllStudents.ToClassScopes(); List <RatingScope <ReportStudent> > gyScopes = AllStudents.ToGradeYearScopes(); List <ScoreParser> parsers = new List <ScoreParser>(new ScoreParser[] { new ScoreParser("加權平均", Utilities.SummaryToken), new ScoreParser("加權總分", Utilities.SummaryToken), new ScoreParser("合計總分", Utilities.SummaryToken), new ScoreParser("算術平均", Utilities.SummaryToken), }); foreach (ScoreParser parser in parsers) { foreach (RatingScope <ReportStudent> Scope in classScopes) { Scope.Rank(parser, PlaceOptions.Unsequence); } foreach (RatingScope <ReportStudent> Scope in gyScopes) { Scope.Rank(parser, PlaceOptions.Unsequence); } } #endregion #region 輸出到 Excel Report report = new Report(); report.Perference = Perference; report.SchoolName = School.ChineseName; report.SchoolYear = Semester.SelectedSchoolYear.ToString(); report.Semester = Semester.SelectedSemester.ToString(); report.Classes = SelectedClasses; report.AllStudents = AllStudents.ToDictionary(); report.SelectedSubject = selectedSubjects; report.SelectedDomain = selectedDomains; report.SubjectDomainMap = SubjectDomainMap; Utilities.DisableControls(this); BackgroundWorker OutputWork = new BackgroundWorker(); OutputWork.DoWork += delegate(object sender1, DoWorkEventArgs e1) { e1.Result = report.Output(); }; OutputWork.RunWorkerCompleted += delegate(object sender1, RunWorkerCompletedEventArgs e1) { if (e1.Error != null) { MsgBox.Show(e1.Error.Message); } else { Utilities.Save(e1.Result as Aspose.Cells.Workbook, "班級學期成績單.xls"); } Utilities.EnableControls(this); }; OutputWork.RunWorkerAsync(report); #endregion }