void ImportNewStudentsUpdateRecord_RowDataValidated(object sender, RowDataValidatedEventArgs e) { if (!_NewStudentUpdateRecordInfoList.ContainsKey(e.Data.ID) || _NewStudentUpdateRecordInfoList[e.Data.ID] == null) { List <string> missingFields = new List <string>(); foreach (string field in InsertRequiredFields) { if (!e.SelectFields.Contains(field)) { missingFields.Add(field); } } if (missingFields.Count > 0) { string msg = ""; foreach (string field in missingFields) { msg += (msg == "" ? "新增的異動必需包含欄位:" : "、") + field; } e.ErrorMessage = msg; return; } } foreach (string field in e.SelectFields) { #region 如果是異動代號則檢查輸入代號是否在清單中 if (field == "異動代碼") { if (updateCodeMapping.ContainsKey(e.Data[field]) == false || updateCodeMapping[e.Data[field]] != Type) { e.ErrorFields.Add(field, "輸入的代號不在指定的" + Type + "代號清單中。"); continue; } } #endregion #region 如果是日期欄位檢查輸入值 if (_DateFields.Contains(field)) { if (e.Data[field] == "" && _NonNullFields.Contains(e.Data[field])) { e.ErrorFields.Add(field, "此欄為必填欄位,請輸入西元年/月/日。"); continue; } else { if (e.Data[field] != "") { //檢查欄位值 if (!CheckIsDate(e.Data[field])) { if (_NonNullFields.Contains(field)) { e.ErrorFields.Add(field, "此欄為必填欄位,\n請依照\"西元年/月/日\"格式輸入。"); } else { e.ErrorFields.Add(field, "輸入格式錯誤,請輸入西元年/月/日。\n此筆錯誤資料將不會被儲存"); } continue; } // 強制轉換日期型態 DateTime dt; if (DateTime.TryParse(e.Data[field], out dt)) { e.Data[field] = dt.ToShortDateString(); } } } } #endregion #region 如果是必填欄位檢查非空值 if (_NonNullFields.Contains(field) && e.Data[field] == "") { e.ErrorFields.Add(field, "此欄位必須填寫,不允許空值"); continue; } #endregion #region 如果是年級則檢查輸入資料 if (field == "年級") { int i = 0; if (e.Data[field] != "延修生" && (!int.TryParse(e.Data[field], out i) || i <= 0)) { e.ErrorFields.Add(field, "年級欄必需依以下格式填寫:\n\t1.若為一般學生請填入學生年級。\n\t2.若為延修生請填入\"延修生\""); continue; } } #endregion } }
private void ImportSemesterEntryScore_RowDataValidated(object sender, RowDataValidatedEventArgs e) { int t; decimal d; StudentRecord student; if (_StudentCollection.ContainsKey(e.Data.ID)) { student = _StudentCollection[e.Data.ID]; } else { e.ErrorMessage = "壓根就沒有這個學生" + e.Data.ID; return; } bool inputFormatPass = true; #region 驗各欄位填寫格式 foreach (string field in e.SelectFields) { string value = e.Data[field]; switch (field) { default: break; case "學年度": case "學分數": case "成績年級": if (value == "" || !int.TryParse(value, out t)) { inputFormatPass &= false; e.ErrorFields.Add(field, "必須填入整數"); } break; case "學期": if (value == "" || !int.TryParse(value, out t) || t > 2 || t < 1) { inputFormatPass &= false; e.ErrorFields.Add(field, "必須填入1或2"); } break; case "學業": case "體育": case "國防通識": case "健康與護理": case "實習科目": case "專業科目": case "學業(原始)": case "體育(原始)": case "國防通識(原始)": case "健康與護理(原始)": case "實習科目(原始)": case "專業科目(原始)": case "德行": if (value != "" && !decimal.TryParse(value, out d)) { inputFormatPass &= false; e.ErrorFields.Add(field, "必須填入空白或數值"); } break; } } #endregion if (inputFormatPass) { string schoolYear = e.Data["學年度"]; string semester = e.Data["學期"]; int sy = int.Parse(schoolYear); int se = int.Parse(semester); #region 驗證資料情節 #region 驗證新增成績學期 bool isNewSubjectInfo = true; string message = ""; foreach (SemesterEntryScoreInfo info in student.SemesterEntryScoreList) { if (info.SchoolYear == sy && info.Semester == se) { isNewSubjectInfo = false; } } if (isNewSubjectInfo) { if (!e.WarningFields.ContainsKey("查無此科目")) { e.WarningFields.Add("查無此科目", "學生在此學期分項成績資訊,將會新增分項成績"); } if (!e.SelectFields.Contains("成績年級")) { message = "發現此學期無分項成績,\n將會新增學期分項成績\n缺少成績必要欄位:成績年級"; } if (message != "") { e.ErrorMessage += (e.ErrorMessage == "" ? "" : "\n") + message; } } #endregion #region 驗證重複學期資料 string key = e.Data.ID + "_" + sy + "_" + se; if (_ID_SchoolYear_Semester.Contains(key)) { e.ErrorMessage += (e.ErrorMessage == "" ? "" : "\n") + "同一學期不允許多筆資料"; } else { _ID_SchoolYear_Semester.Add(key); } #endregion #region 驗證成績年級變更 if (e.SelectFields.Contains("成績年級")) { int gy = int.Parse(e.Data["成績年級"]); foreach (SemesterEntryScoreInfo info in student.SemesterEntryScoreList) { if (info.SchoolYear == sy && info.Semester == se && info.GradeYear != gy) { if (!e.WarningFields.ContainsKey("成績年級")) { e.WarningFields.Add("成績年級", "修改成績年級資訊將會改變此學生在該學期的所有分項成績的成績年級"); } } } } #endregion #endregion } }
protected override void OnValidateRow(RowDataValidatedEventArgs e) { int t; decimal d; StudentRecord student; if (_StudentCollection.ContainsKey(e.Data.ID)) { student = _StudentCollection[e.Data.ID]; } else { e.ErrorMessage = "壓根就沒有這個學生" + e.Data.ID; return; } bool inputFormatPass = true; bool hasScore = false; #region 驗各欄位填寫格式 foreach (string field in e.SelectFields) { string value = e.Data[field]; switch (field) { default: break; case "科目": if (value == "") { inputFormatPass &= false; e.ErrorFields.Add(field, "必須填寫"); } break; case "學年度": case "成績年級": if (value == "" || !int.TryParse(value, out t)) { inputFormatPass &= false; e.ErrorFields.Add(field, "必須填入整數"); } break; case "結算成績": case "補考成績": case "重修成績": if (value != "") { if (!decimal.TryParse(value, out d)) { inputFormatPass &= false; e.ErrorFields.Add(field, "必須填入數字"); } else { hasScore = true; } } break; } } #endregion //輸入格式正確才會針對情節做檢驗 if (inputFormatPass) { string errorMessage = ""; string subject = e.Data["科目"]; string schoolYear = e.Data["學年度"]; int? sy = null; if (int.TryParse(schoolYear, out t)) { sy = t; } if (sy != null) { string key = e.Data.ID + "_" + sy; #region 驗證新增學年成績 bool isNewSubjectInfo = true; string message = ""; foreach (SchoolYearSubjectScoreInfo info in student.SchoolYearSubjectScoreList) { if (info.SchoolYear == sy) { if (info.Subject == subject) { isNewSubjectInfo = false; } } } if (isNewSubjectInfo) { if (!e.WarningFields.ContainsKey("科目")) { e.WarningFields.Add("科目", "學生在此學年並無此筆學年成績資訊,將會新增此學年成績。"); } else { e.WarningFields["科目"] += "、" + "學生在此學年並無此筆學年成績資訊,將會新增此學年成績。"; } foreach (string field in new string[] { "科目", "學年度", "成績年級" }) { if (!e.SelectFields.Contains(field)) { message += (message == "" ? "發現此學期無此科目,\n將會新增成績\n缺少成績必要欄位" : "、") + field; } } bool hasScoreField = false; foreach (string field in new string[] { "結算成績", "補考成績", "重修成績" }) { if (e.SelectFields.Contains(field)) { hasScoreField = true; } } if (!hasScoreField) { message += (message == "" ? "發現此學期無此科目,\n將會新增成績\n缺少成績必要欄位" : "、") + "(結算成績、補考成績、重修成績 擇一)"; } if (message != "") { errorMessage += (errorMessage == "" ? "" : "\n") + message; } } #endregion #region 驗證重複科目資料 string skey = subject; if (!_ID_SchoolYear_Subject.ContainsKey(key)) { _ID_SchoolYear_Subject.Add(key, new List <string>()); } if (_ID_SchoolYear_Subject[key].Contains(skey)) { errorMessage += (errorMessage == "" ? "" : "\n") + "同一學期不允許多筆相同科目資料"; } else { _ID_SchoolYear_Subject[key].Add(skey); } #endregion #region 檢查學期成績包含此科目 if (!_StudentSchoolYearSubjectCollection[e.Data.ID].ContainsKey((int)sy) || !_StudentSchoolYearSubjectCollection[e.Data.ID][(int)sy].Contains(subject)) { if (!e.WarningFields.ContainsKey("科目")) { e.WarningFields.Add("科目", "在此學年的學生學期科目成績中,查無此科目的成績。"); } else { e.WarningFields["科目"] += "、" + "在此學年的學生學期科目成績中,查無此科目的成績。"; } } #endregion if (e.SelectFields.Contains("成績年級")) { int gy = int.Parse(e.Data["成績年級"]); #region 驗證成績年級變更 foreach (SchoolYearSubjectScoreInfo info in student.SchoolYearSubjectScoreList) { if (info.SchoolYear == sy && info.GradeYear != gy) { if (!e.WarningFields.ContainsKey("成績年級")) { e.WarningFields.Add("成績年級", "修改成績年級資訊將會改變此學生在該學期的所有學年成績的成績年級"); } else { e.WarningFields["成績年級"] += "、" + "修改成績年級資訊將會改變此學生在該學期的所有學年成績的成績年級"; } break; } } #endregion #region 驗證同學期在匯入資料中成績年級會相同 if (!_ID_SchoolYear_GradeYear.ContainsKey(key)) { _ID_SchoolYear_GradeYear.Add(key, gy); } else { if (_ID_SchoolYear_GradeYear[key] != gy) { if (!e.ErrorFields.ContainsKey("成績年級")) { e.ErrorFields.Add("成績年級", "發現此學生同一學年有不同成績年級資料"); } else { e.ErrorFields["成績年級"] += "、" + "發現此學生同一學年有不同成績年級資料"; } } } #endregion #region 驗證成績年級與學期成績相同 if (_StudentSchoolYearGradeYearCollection[e.Data.ID].ContainsKey((int)sy) && _StudentSchoolYearGradeYearCollection[e.Data.ID][(int)sy] != gy) { if (!e.WarningFields.ContainsKey("成績年級")) { e.WarningFields.Add("成績年級", "成績年級與學生科目成績中的成績年級不同。"); } else { e.WarningFields["成績年級"] += "、" + "成績年級與學生科目成績中的成績年級不同。"; } } #endregion } } e.ErrorMessage = errorMessage; if (!hasScore) { e.ErrorMessage += "匯入資料必須包含成績"; } } }