private static bool IsCorrectDataType(this FFParameterTypes parameterType, object value) { //если пустое значение, считаем, что правильно if (value == null || (String.IsNullOrWhiteSpace(value.ToString()))) { return(true); } var val = value.ToString(); switch (parameterType) { case FFParameterTypes.Boolean: bool b; var coll = val.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); return(coll.Length <= 0 || Boolean.TryParse(coll[0], out b)); case FFParameterTypes.Numeric: case FFParameterTypes.NumericPositive: double d; return(Double.TryParse(val, out d)); case FFParameterTypes.NumericNatural: case FFParameterTypes.NumericInteger: int i; var res = Int32.TryParse(val, out i); if (res && (parameterType == FFParameterTypes.NumericNatural)) { res = i >= 0; //нули тоже можно } return(res); case FFParameterTypes.String: return(true); case FFParameterTypes.Date: case FFParameterTypes.DateTime: DateTime dt; return(DateTime.TryParse(val, out dt)); } return(false); }
public static object ConvertToRealDataType(this FFParameterTypes parameterType, FFParameterEditors parameterEditor, object value) { //инициализационное значение присваивается новому параметру, чтобы его можно было редактировать var isInitValue = value == DBNull.Value; if (!isInitValue && (value == null || String.IsNullOrWhiteSpace(value.ToString()))) { return(value); } object realvalue; switch (parameterType) { case FFParameterTypes.Boolean: if (isInitValue) { return(false); } //в вебе из чекбокса приходит "true,false" или "false" var str = value.ToString().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); if (str.Length > 0) { switch (str[0]) { case "1": str[0] = "true"; break; case "0": str[0] = "false"; break; } realvalue = (str.Length > 0) && Convert.ToBoolean(str[0]); } else { realvalue = false; } break; case FFParameterTypes.Numeric: case FFParameterTypes.NumericPositive: if (isInitValue) { return(0); } double d; realvalue = Double.TryParse(value.ToString(), out d) ? d : 0; break; case FFParameterTypes.NumericNatural: case FFParameterTypes.NumericInteger: if (isInitValue) { return(0); } int i; realvalue = Int32.TryParse(value.ToString(), out i) ? i : 0; break; case FFParameterTypes.String: if (parameterEditor.Equals(FFParameterEditors.ComboBox)) { if (isInitValue) { return(0); } long l; return(Int64.TryParse(value.ToString(), out l) ? l : 0); } if (isInitValue) { return(String.Empty); } realvalue = value.ToString(); break; case FFParameterTypes.Date: case FFParameterTypes.DateTime: if (isInitValue) { return(DateTime.MinValue); } DateTime dt; realvalue = DateTime.TryParse(value.ToString(), out dt) ? dt : (DateTime.TryParseExact(value.ToString(), "yyyy-MM-dd", null, System.Globalization.DateTimeStyles.None, out dt) ? dt : DateTime.MinValue); break; default: return(isInitValue ? String.Empty : value.ToString()); } return(realvalue); }