// 新版會依照 使用者點選的評分項目 直接顯示對應的分數項目 public ESLScoreInputForm(string targetCourseName, ESLTemplate eslTemplate, Dictionary <string, List <ESLScore> > scoreDict, string targetTermName, string targetSubjectName, string targetAssessmentName, List <K12.Data.SCAttendRecord> scaList) { InitializeComponent(); _targetCourseName = targetCourseName; _targetTermName = targetTermName; _targetSubjectName = targetSubjectName; _targetAssessmentName = targetAssessmentName; _eslTemplate = eslTemplate; // 對出 目前的 評量的 分數類型 _targetScoreType = _eslTemplate.TermList.Find(t => t.Name == _targetTermName).SubjectList.Find(s => s.Name == _targetSubjectName).AssessmentList.Find(a => a.Name == _targetAssessmentName).Type; // 對出 目前的 指標型分數 可以用的 指標 _targetIndicatorList = _eslTemplate.TermList.Find(t => t.Name == _targetTermName).SubjectList.Find(s => s.Name == _targetSubjectName).AssessmentList.Find(a => a.Name == _targetAssessmentName).IndicatorsList; // 對出 目前的 評語型分數 可以輸入的字數上限 _commentLimit = _eslTemplate.TermList.Find(t => t.Name == _targetTermName).SubjectList.Find(s => s.Name == _targetSubjectName).AssessmentList.Find(a => a.Name == _targetAssessmentName).InputLimit; _scoreDict = scoreDict; _scaList = scaList; labelX1.Text = _targetCourseName + " / " + _targetSubjectName + " / " + _targetAssessmentName; // 課程名稱 / 科目名稱 / 評量名稱 // 不同的分數型態 有不同的表頭 switch (_targetScoreType) { case "Score": ColScore.HeaderText = "分數"; break; case "Indicator": ColScore.HeaderText = "指標"; break; case "Comment": ColScore.HeaderText = "評語"; break; default: ColScore.HeaderText = "分數"; break; } // 填入分數 FillScore(); }
private void GetESLTemplate() { picLoading.Visible = true; string courseIDs = string.Join(",", _CourseIDList); #region 取得ESL 課程資料 // 2018/06/12 抓取課程且其有ESL 樣板設定規則的,才做後續整理, 在table exam_template 欄位 description 不為空代表其為ESL 的樣板 string query = @" SELECT course.id AS courseID ,course.course_name ,exam_template.description ,exam_template.id AS templateID ,exam_template.name AS templateName FROM course LEFT JOIN exam_template ON course.ref_exam_template_id =exam_template.id WHERE course.id IN( " + courseIDs + ") AND exam_template.description IS NOT NULL "; QueryHelper qh = new QueryHelper(); DataTable dt = qh.Select(query); _CourseIDList.Clear(); // 清空 //整理目前的ESL 課程資料 if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { ESLCourse record = new ESLCourse(); _CourseIDList.Add("" + dr["courseID"]); // 加入真正的 是ESL 課程ID if (!_ESLCourseIDExamTermIDDict.ContainsKey("" + dr["courseID"])) { _ESLCourseIDExamTermIDDict.Add("" + dr["courseID"], "" + dr["templateID"]); } if (!_ESLTemplateDict.ContainsKey("" + dr["templateID"])) { ESLTemplate template = new ESLTemplate(); template.ID = "" + dr["templateID"]; template.ESLTemplateName = "" + dr["templateName"]; template.Description = "" + dr["description"]; _ESLTemplateDict.Add("" + dr["templateID"], template); } // 建立課程名稱對照 if (!_ESLCourseIDNameDict.ContainsKey("" + dr["courseID"])) { _ESLCourseIDNameDict.Add("" + dr["courseID"], "" + dr["course_name"]); } } } #endregion #region 解析ESL 課程 計算規則 // 解析計算規則 foreach (string templateID in _ESLTemplateDict.Keys) { string xmlStr = "<root>" + _ESLTemplateDict[templateID].Description + "</root>"; XElement elmRoot = XElement.Parse(xmlStr); //解析讀下來的 descriptiony 資料 if (elmRoot != null) { if (elmRoot.Element("ESLTemplate") != null) { foreach (XElement ele_term in elmRoot.Element("ESLTemplate").Elements("Term")) { Term t = new Term(); t.Name = ele_term.Attribute("Name").Value; t.Weight = ele_term.Attribute("Weight").Value; t.InputStartTime = ele_term.Attribute("InputStartTime").Value; t.InputEndTime = ele_term.Attribute("InputEndTime").Value; t.Ref_exam_id = ele_term.Attribute("Ref_exam_id").Value; t.SubjectList = new List <Subject>(); foreach (XElement ele_subject in ele_term.Elements("Subject")) { Subject s = new Subject(); s.Name = ele_subject.Attribute("Name").Value; s.Weight = ele_subject.Attribute("Weight").Value; s.AssessmentList = new List <Assessment>(); foreach (XElement ele_assessment in ele_subject.Elements("Assessment")) { Assessment a = new Assessment(); a.Name = ele_assessment.Attribute("Name").Value; a.Weight = ele_assessment.Attribute("Weight").Value; a.TeacherSequence = ele_assessment.Attribute("TeacherSequence").Value; a.Type = ele_assessment.Attribute("Type").Value; a.AllowCustomAssessment = ele_assessment.Attribute("AllowCustomAssessment").Value; if (a.Type == "Comment") // 假如是 評語類別,多讀一項 輸入限制屬性 { a.InputLimit = ele_assessment.Attribute("InputLimit").Value; } a.IndicatorsList = new List <Indicators>(); if (ele_assessment.Element("Indicators") != null) { foreach (XElement ele_Indicator in ele_assessment.Element("Indicators").Elements("Indicator")) { Indicators i = new Indicators(); i.Name = ele_Indicator.Attribute("Name").Value; i.Description = ele_Indicator.Attribute("Description").Value; a.IndicatorsList.Add(i); } } s.AssessmentList.Add(a); } t.SubjectList.Add(s); } _ESLTemplateDict[templateID].TermList.Add(t); } } } } #endregion #region 取得學生修課資料 _scaList = K12.Data.SCAttend.SelectByCourseIDs(_CourseIDList); #endregion }
//每一次 傳一筆 Course 有的 subjectDict 進來,還有目前 template ,targetTermName public CourseDataGridViewRow(string courseName, Dictionary <string, List <ESLScore> > subjectDict, ESLTemplate ESLTemplateDict, string targetTermName) { _is_finish = true; // 數出 個項目的 輸入情況 foreach (Term term in ESLTemplateDict.TermList) { if (term.Name == targetTermName) { foreach (Subject subject in term.SubjectList) { foreach (Assessment assessment in subject.AssessmentList) { foreach (string subjectName in subjectDict.Keys) { if (subject.Name == subjectName) { foreach (ESLScore scoreItem in subjectDict[subjectName]) { if (assessment.Name == scoreItem.Assessment) { //有值 才加分子 ,且不能為空字串(web 前端成績輸入會存到如此資料,恩正說,此狀況視為沒有輸入) if (scoreItem.HasValue && scoreItem.Value != "") { // 子項目 分子 if (!assessmentCountDict.ContainsKey(subject.Name + "_" + assessment.Name)) { assessmentCountDict.Add(subject.Name + "_" + assessment.Name, 1); } else { assessmentCountDict[subject.Name + "_" + assessment.Name]++; } } else { // 子項目 分子 if (!assessmentCountDict.ContainsKey(subject.Name + "_" + assessment.Name)) { assessmentCountDict.Add(subject.Name + "_" + assessment.Name, 0); } } // 子項目 分母 if (!assessmentTotalCountDict.ContainsKey(subject.Name + "_" + assessment.Name)) { assessmentTotalCountDict.Add(subject.Name + "_" + assessment.Name, 1); } else { assessmentTotalCountDict[subject.Name + "_" + assessment.Name]++; } // 子項目 老師名稱 if (!assessmentTeacherNametDict.ContainsKey(subject.Name + "_" + assessment.Name)) { assessmentTeacherNametDict.Add(subject.Name + "_" + assessment.Name, scoreItem.RefTeacherName); } } } } } } } } } // 依目前 所選樣板、試別 對出 與表頭 相應的內容 DataGridViewCell courseNameCell = new DataGridViewTextBoxCell(); courseNameCell.Value = courseName; this.Cells.Add(courseNameCell); // 數出總項目 未填寫完畢項目 foreach (Term term in ESLTemplateDict.TermList) { if (term.Name == targetTermName) { int total = 0; int scoreCount = 0; foreach (Subject subject in term.SubjectList) { foreach (Assessment assessment in subject.AssessmentList) { total++; int assessmentTotal = assessmentTotalCountDict[subject.Name + "_" + assessment.Name]; int assessmentScoreCount = assessmentCountDict[subject.Name + "_" + assessment.Name]; // 子項目 總數 等於 有分數 的數量,就是 完成 if (assessmentTotal == assessmentScoreCount) { scoreCount++; } } } string ScoreField = string.Format("{0}/{1}", scoreCount, total); // 填總項目 已完成 數量 DataGridViewCell cell = new DataGridViewTextBoxCell(); cell.Value = ScoreField; DataGridViewCellStyle style = new DataGridViewCellStyle(); style.ForeColor = (total == scoreCount) ? Color.Black : Color.Red; cell.Style = style; this.Cells.Add(cell); } } // 子項目 每一個學生分數的填寫 狀態 foreach (Term term in ESLTemplateDict.TermList) { if (term.Name == targetTermName) { foreach (Subject subject in term.SubjectList) { foreach (Assessment assessment in subject.AssessmentList) { int total = assessmentTotalCountDict[subject.Name + "_" + assessment.Name]; int scoreCount = assessmentCountDict[subject.Name + "_" + assessment.Name]; string ScoreField = string.Format(Format, scoreCount, total, assessmentTeacherNametDict[subject.Name + "_" + assessment.Name]); if (total != scoreCount) { _is_finish = false; } DataGridViewCell cell = new DataGridViewTextBoxCell(); cell.Value = ScoreField; DataGridViewCellStyle style = new DataGridViewCellStyle(); style.ForeColor = (total == scoreCount) ? Color.Black : Color.Red; cell.Style = style; cell.Tag = assessment.Name; this.Cells.Add(cell); } } } } }
public ESLTransferScoreInputForm(string targetScAttendID) { InitializeComponent(); _targetScAttendID = targetScAttendID; #region 取得學生修課資料 _scAttendRecord = K12.Data.SCAttend.SelectByID(_targetScAttendID); #endregion #region 取得ESL 課程資料 _targetCourseID = _scAttendRecord.RefCourseID; _targetCourseName = _scAttendRecord.Course.Name; _targetTemplateID = _scAttendRecord.Course.RefAssessmentSetupID; string query = @" SELECT course.id AS courseID ,course.course_name ,exam_template.description ,exam_template.id AS templateID ,exam_template.name AS templateName FROM course LEFT JOIN exam_template ON course.ref_exam_template_id =exam_template.id WHERE course.id IN( " + _targetCourseID + ") AND exam_template.description IS NOT NULL "; QueryHelper qh = new QueryHelper(); DataTable dt = qh.Select(query); _CourseIDList.Clear(); // 清空 //整理目前的ESL 課程資料 if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { ESLCourse record = new ESLCourse(); _CourseIDList.Add("" + dr["courseID"]); // 加入真正的 是ESL 課程ID if (!_ESLCourseIDExamTermIDDict.ContainsKey("" + dr["courseID"])) { _ESLCourseIDExamTermIDDict.Add("" + dr["courseID"], "" + dr["templateID"]); } if (!_ESLTemplateDict.ContainsKey("" + dr["templateID"])) { ESLTemplate template = new ESLTemplate(); template.ID = "" + dr["templateID"]; template.ESLTemplateName = "" + dr["templateName"]; template.Description = "" + dr["description"]; _ESLTemplateDict.Add("" + dr["templateID"], template); } // 建立課程名稱對照 if (!_ESLCourseIDNameDict.ContainsKey("" + dr["courseID"])) { _ESLCourseIDNameDict.Add("" + dr["courseID"], "" + dr["course_name"]); } } } #endregion #region 解析ESL 課程 計算規則 // 解析計算規則 foreach (string templateID in _ESLTemplateDict.Keys) { string xmlStr = "<root>" + _ESLTemplateDict[templateID].Description + "</root>"; XElement elmRoot = XElement.Parse(xmlStr); //解析讀下來的 descriptiony 資料 if (elmRoot != null) { if (elmRoot.Element("ESLTemplate") != null) { foreach (XElement ele_term in elmRoot.Element("ESLTemplate").Elements("Term")) { Term t = new Term(); t.Name = ele_term.Attribute("Name").Value; t.Weight = ele_term.Attribute("Weight").Value; t.InputStartTime = ele_term.Attribute("InputStartTime").Value; t.InputEndTime = ele_term.Attribute("InputEndTime").Value; t.Ref_exam_id = ele_term.Attribute("Ref_exam_id").Value; t.SubjectList = new List <Subject>(); foreach (XElement ele_subject in ele_term.Elements("Subject")) { Subject s = new Subject(); s.Name = ele_subject.Attribute("Name").Value; s.Weight = ele_subject.Attribute("Weight").Value; s.AssessmentList = new List <Assessment>(); foreach (XElement ele_assessment in ele_subject.Elements("Assessment")) { Assessment a = new Assessment(); a.Name = ele_assessment.Attribute("Name").Value; a.Weight = ele_assessment.Attribute("Weight").Value; a.TeacherSequence = ele_assessment.Attribute("TeacherSequence").Value; a.Type = ele_assessment.Attribute("Type").Value; a.AllowCustomAssessment = ele_assessment.Attribute("AllowCustomAssessment").Value; if (a.Type == "Comment") // 假如是 評語類別,多讀一項 輸入限制屬性 { a.InputLimit = ele_assessment.Attribute("InputLimit").Value; } a.IndicatorsList = new List <Indicators>(); if (ele_assessment.Element("Indicators") != null) { foreach (XElement ele_Indicator in ele_assessment.Element("Indicators").Elements("Indicator")) { Indicators i = new Indicators(); i.Name = ele_Indicator.Attribute("Name").Value; i.Description = ele_Indicator.Attribute("Description").Value; a.IndicatorsList.Add(i); } } s.AssessmentList.Add(a); } t.SubjectList.Add(s); } _ESLTemplateDict[templateID].TermList.Add(t); } } } } #endregion _eslTemplate = _ESLTemplateDict[_ESLCourseIDExamTermIDDict[_targetCourseID]]; //_scoreDict = scoreDict; labelX1.Text = _targetCourseName; // 填 試別 FillcboExam(); // 填入分數 //FillScore(); }