/// <summary> /// Проверка формата колонок. /// </summary> /// <param name="errorMes">Список найденных ошибки</param> /// <returns>Если ошибок нет, то результат true</returns> private bool CheckFormatColumns(out string errorMes) { //Копируем DataTable. Все операции будем производить с копией. System.Data.DataTable dt2 = sys.DataTable_To_DataTable(dt); errorMes = ""; int columnCount = dt.Columns.Count; string[,] arrErrors = new string[dt.Rows.Count, dt.Columns.Count]; for (int i = 0; i < importDT.Rows.Count; i++) { string columnType = importDT.Value("ColumnType"); string columnFormat = importDT.Value("ColumnFormat"); string defaultValue = importDT.Value("DefaultValue"); string tryParse = importDT.Value("TryParse"); string setValue = importDT.Value("SetValue"); string setCharCase = importDT.Value("SetCharCase"); string minValue = importDT.Value("MinValue"); string maxValue = importDT.Value("MaxValue"); string deleteChars = importDT.Value("DeleteChars"); string leaveChars = importDT.Value("LeaveChars"); //Это для ускорения работы, чтобы каждый раз не переводить minValue в дату для стравнения в цикле. DateTime minValueDate = DateTime.Now; //Это по умолчанию DateTime maxValueDate = DateTime.Now; //Это по умолчанию TimeSpan minValueTime = DateTime.Now.TimeOfDay; //Это по умолчанию TimeSpan maxValueTime = DateTime.Now.TimeOfDay; //Это по умолчанию if ((minValue != "")) { if (columnFormat == "date") { minValueDate = DateTime.ParseExact(minValue, "dd.MM.yyyy", null); } if (columnFormat == "time") { minValueTime = TimeSpan.ParseExact(minValue, "hh:mm:ss", null); } } if ((maxValue != "")) { if (columnFormat == "date") { maxValueDate = DateTime.ParseExact(maxValue, "dd.MM.yyyy", null); } if (columnFormat == "time") { maxValueTime = TimeSpan.ParseExact(maxValue, "hh:mm:ss", null); } } if (i >= columnCount) { break; } //Выходим, если в настроечной таблице, колонок больше, чем в проверяемой. например есть необязательные колонки. //Их нет, поэтому проверять нечего. if ((dt2.Columns.Count - 1) < i) { break; } //Одна колонка importDT соответствует одной колонке dt. Поэтому идем по значениям колонки dt. for (int j = 0; j < dt2.Rows.Count; j++) { string value = dt2.Value(j, i); string newvalue = ""; arrErrors[j, i] = CheckFormatValue(columnType, columnFormat, defaultValue, tryParse, setValue, setCharCase, minValue, maxValue, minValueDate, maxValueDate, minValueTime, maxValueTime, deleteChars, leaveChars, value, out newvalue); if (newvalue != "") { dt.Rows[j][i] = newvalue; } } } return(errorMes == ""); }
/// <summary> /// Проверка наличия колонок. /// </summary> /// <param name="errorMes">Список найденных ошибки</param> /// <returns>Если ошибок нет, то результат true</returns> private bool CheckColumns(out string errorMes) { errorMes = ""; for (int i = 0; i < importDT.Rows.Count; i++) { string importColumnName = importDT.Value("ColumnName"); string importColumnObligatory = importDT.Value("ColumnObligatory"); //Проверка на обязательность наличия колонки. if ((importColumnObligatory.ToInt() == 1) && (i >= dt.Columns.Count)) { errorMes = errorMes + "Ошибка. Отсутствует обязательная колонка " + importColumnName + Var.CR; continue; } //Проверка на название колонки. string columnName = dt.Columns[i].Caption; if (columnName != importColumnName) { errorMes = errorMes + "Ошибка. Колонка с номером " + i.ToString() + " должна иметь название " + importColumnName + Var.CR; continue; } } return(errorMes == ""); }