コード例 #1
0
ファイル: ConfigForm.cs プロジェクト: ischoolinc/JHEvaluation
        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;
        }
コード例 #2
0
        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
        }