Пример #1
0
        public object Format(
            object value,
            Type targetType,
            bool coerceNullValue,
            IDataConversionInfoProvider converstionInfoProvider)
        {
            if (converstionInfoProvider == null)
            {
                return(value);
            }
            bool        flag             = (object)targetType == (object)this.StringType && !(value is string);
            CultureInfo formatterCulture = this.GetFormatterCulture((IFormatProvider)converstionInfoProvider.FormatInfo);

            if (flag)
            {
                targetType = converstionInfoProvider.DataType;
            }
            try
            {
                value = this.FormatCore(value, targetType, formatterCulture, converstionInfoProvider, coerceNullValue);
                if (flag)
                {
                    value = this.FormatCore(value, this.StringType, formatterCulture, converstionInfoProvider, false);
                }
            }
            catch (Exception ex)
            {
                this.ThrowFormatException(ex);
            }
            return(value);
        }
Пример #2
0
 private bool ParseValueCore(
     object value,
     Type targetType,
     TypeConverter targetTypeConverter,
     TypeConverter dataTypeConverter,
     IDataConversionInfoProvider dataColumn,
     CultureInfo cultureInfo,
     out object result)
 {
     result = (object)null;
     if (value is string)
     {
         return(((object)targetType != (object)typeof(char) || !string.IsNullOrEmpty(value as string)) && this.InvokeStringParseMethod(value, targetType, (IFormatProvider)cultureInfo, out result));
     }
     if (value is ToggleState)
     {
         if (this.ParseToggleState(value, targetType, targetTypeConverter, dataTypeConverter, dataColumn, cultureInfo, out result))
         {
             return(true);
         }
     }
     else if (value != null && targetType.IsAssignableFrom(value.GetType()))
     {
         result = value;
         return(true);
     }
     return(false);
 }
Пример #3
0
 public object Format(
     object value,
     Type targetType,
     IDataConversionInfoProvider converstionInfoProvider)
 {
     return(this.Format(value, targetType, true, converstionInfoProvider));
 }
Пример #4
0
 private bool FormatNullValue(
     object value,
     Type targetType,
     CultureInfo cultureInfo,
     TypeConverter dataTypeConverter,
     IDataConversionInfoProvider column,
     out object result)
 {
     result = (object)null;
     if (value == DBNull.Value || value == null)
     {
         if (column.NullValue != null)
         {
             result = this.FormatCore(column.NullValue, targetType, cultureInfo, column, false);
             return(true);
         }
         if ((object)targetType == (object)this.StringType)
         {
             result = (object)string.Empty;
             return(true);
         }
         if ((object)targetType == (object)this.ToggleStateType)
         {
             result = (object)ToggleState.Indeterminate;
             return(true);
         }
         if ((object)targetType == (object)this.ColorType)
         {
             result = (object)Color.Empty;
             return(true);
         }
     }
     return(false);
 }
Пример #5
0
        private bool FormatToggleStateValue(
            object value,
            Type type,
            TypeConverter dataTypeConverter,
            IDataConversionInfoProvider dataColumn,
            TypeConverter valueConverter,
            CultureInfo cultureInfo,
            out object result)
        {
            result = (object)null;
            if ((object)type == (object)this.BooleanType)
            {
                result = (object)(ToggleState)((bool)value ? 1 : 0);
                return(true);
            }
            if ((object)type == (object)this.StringType && value != null)
            {
                string lower = value.ToString().ToLower();
                result = (object)(ToggleState)(RadDataConverter.trueValues.Contains(lower) ? 1 : 0);
                return(true);
            }
            if (dataTypeConverter == null)
            {
                dataTypeConverter = valueConverter;
            }
            if (dataTypeConverter == null || !dataTypeConverter.CanConvertTo(dataColumn as ITypeDescriptorContext, this.BooleanType))
            {
                return(false);
            }
            bool flag = (bool)dataTypeConverter.ConvertTo(dataColumn as ITypeDescriptorContext, cultureInfo, value, this.BooleanType);

            result = (object)(ToggleState)(flag ? 1 : 0);
            return(true);
        }
Пример #6
0
 public GridDataConversionInfo(IDataConversionInfoProvider conversionInfo)
 {
     this.dataType            = conversionInfo.DataType;
     this.dataTypeConverter   = conversionInfo.DataTypeConverter;
     this.dataSourceNullValue = conversionInfo.DataSourceNullValue;
     this.nullValue           = conversionInfo.NullValue;
     this.formatInfo          = conversionInfo.FormatInfo;
     this.formatString        = conversionInfo.FormatString;
 }
Пример #7
0
        public bool EqualsNullValue(object value, IDataConversionInfoProvider dataColumn)
        {
            if (value == DBNull.Value || value == null)
            {
                return(true);
            }
            CultureInfo formatterCulture = this.GetFormatterCulture((IFormatProvider)dataColumn.FormatInfo);
            string      nullValue        = dataColumn.NullValue as string;
            string      strA             = value as string;

            if (nullValue != null && strA != null)
            {
                return(string.Compare(strA, nullValue, true, formatterCulture) == 0);
            }
            return(object.Equals(value, dataColumn.NullValue));
        }
Пример #8
0
 private bool ParseWithTypeConverter(
     object value,
     Type sourceType,
     TypeConverter dataTypeConverter,
     IDataConversionInfoProvider dataColumn,
     CultureInfo cultureInfo,
     out object result)
 {
     result = (object)null;
     if (dataTypeConverter == null || !dataTypeConverter.CanConvertFrom(dataColumn as ITypeDescriptorContext, sourceType))
     {
         return(false);
     }
     result = dataTypeConverter.ConvertFrom(dataColumn as ITypeDescriptorContext, cultureInfo, value);
     return(true);
 }
Пример #9
0
 public Exception TryParse(
     IDataConversionInfoProvider converstionInfoProvider,
     object value,
     out object result)
 {
     try
     {
         result = this.Parse(converstionInfoProvider, value);
         return((Exception)null);
     }
     catch (Exception ex)
     {
         result = (object)null;
         return(ex);
     }
 }
Пример #10
0
 public Exception TryFormat(
     object value,
     Type targetType,
     IDataConversionInfoProvider converstionInfoProvider,
     out object result)
 {
     try
     {
         result = this.Format(value, targetType, converstionInfoProvider);
         return((Exception)null);
     }
     catch (Exception ex)
     {
         result = (object)null;
         return(ex);
     }
 }
Пример #11
0
        private bool ParseToggleState(
            object value,
            Type targetType,
            TypeConverter targetTypeConverter,
            TypeConverter dataTypeConverter,
            IDataConversionInfoProvider dataColumn,
            CultureInfo cultureInfo,
            out object result)
        {
            result = (object)null;
            ToggleState toggleState = (ToggleState)value;

            if ((object)targetType == (object)typeof(ToggleState))
            {
                result = (object)toggleState;
                return(true);
            }
            if (toggleState == ToggleState.Indeterminate)
            {
                result = (object)null;
                return(true);
            }
            if ((object)targetType == (object)this.BooleanType)
            {
                result = (object)(toggleState == ToggleState.On);
                return(true);
            }
            if (dataTypeConverter == null)
            {
                dataTypeConverter = targetTypeConverter;
            }
            if (dataTypeConverter == null || !dataTypeConverter.CanConvertFrom(dataColumn as ITypeDescriptorContext, this.BooleanType))
            {
                return(false);
            }
            result = dataTypeConverter.ConvertFrom(dataColumn as ITypeDescriptorContext, cultureInfo, (object)(toggleState == ToggleState.On));
            return(true);
        }
Пример #12
0
        public object Parse(
            IDataConversionInfoProvider converstionInfoProvider,
            object value)
        {
            if (converstionInfoProvider == null)
            {
                return(value);
            }
            Type          sourceType1       = this.NullableUnwrap(value?.GetType());
            Type          type              = this.NullableUnwrap(converstionInfoProvider.DataType);
            TypeConverter dataTypeConverter = this.NullableUnwrap(converstionInfoProvider.DataTypeConverter);
            object        obj = (object)Nullable.GetUnderlyingType(converstionInfoProvider.DataType) == null || value != null && value != DBNull.Value ? (value != null && !string.IsNullOrEmpty(Convert.ToString(value)) || (object)Nullable.GetUnderlyingType(converstionInfoProvider.DataType) == null ? this.ParseCore(value, type, sourceType1, dataTypeConverter, converstionInfoProvider, true) : converstionInfoProvider.DataTypeConverter.ConvertFrom(converstionInfoProvider as ITypeDescriptorContext, converstionInfoProvider.FormatInfo, value)) : (object)null;

            if (obj == null)
            {
                obj = this.NullData(type, converstionInfoProvider.DataSourceNullValue);
                if (obj != null)
                {
                    Type sourceType2 = this.NullableUnwrap(obj.GetType());
                    obj = this.ParseCore(obj, type, sourceType2, dataTypeConverter, converstionInfoProvider, false);
                }
            }
            return(obj);
        }
Пример #13
0
        private object ParseCore(
            object value,
            Type targetType,
            Type sourceType,
            TypeConverter dataTypeConverter,
            IDataConversionInfoProvider dataColumn,
            bool checkFormattedNullValue)
        {
            if (checkFormattedNullValue && this.EqualsNullValue(value, dataColumn))
            {
                return((object)null);
            }
            CultureInfo   formatterCulture = this.GetFormatterCulture((IFormatProvider)dataColumn.FormatInfo);
            TypeConverter converter1       = this.GetConverter(targetType);

            if (dataTypeConverter != null && converter1 != dataTypeConverter && dataTypeConverter.CanConvertFrom(dataColumn as ITypeDescriptorContext, sourceType))
            {
                return(dataTypeConverter.ConvertFrom(dataColumn as ITypeDescriptorContext, formatterCulture, value));
            }
            if ((object)targetType != null && (object)sourceType != null && (object)targetType == (object)sourceType)
            {
                return(value);
            }
            TypeConverter converter2 = this.GetConverter(sourceType);

            if (dataTypeConverter != null && dataTypeConverter is ColorConverter && converter2 is StringConverter)
            {
                return(dataTypeConverter.ConvertFromString(dataColumn as ITypeDescriptorContext, formatterCulture, value.ToString()));
            }
            if (dataTypeConverter != null && dataTypeConverter is ColorConverter && (!(converter2 is StringConverter) && dataTypeConverter.CanConvertFrom(dataColumn as ITypeDescriptorContext, sourceType)))
            {
                return(dataTypeConverter.ConvertFrom(dataColumn as ITypeDescriptorContext, formatterCulture, value));
            }
            if (dataTypeConverter != null && dataTypeConverter is StringConverter && converter2 is ColorConverter)
            {
                return((object)dataTypeConverter.ConvertToString(dataColumn as ITypeDescriptorContext, formatterCulture, value));
            }
            if (dataTypeConverter != null && !(dataTypeConverter is StringConverter) && (converter2 is ColorConverter && dataTypeConverter.CanConvertTo(dataColumn as ITypeDescriptorContext, targetType)))
            {
                return(dataTypeConverter.ConvertTo(dataColumn as ITypeDescriptorContext, formatterCulture, value, targetType));
            }
            if (dataTypeConverter != null && converter2 != dataTypeConverter && dataTypeConverter.CanConvertTo(dataColumn as ITypeDescriptorContext, targetType))
            {
                return(dataTypeConverter.ConvertTo(dataColumn as ITypeDescriptorContext, formatterCulture, value, targetType));
            }
            object result = (object)null;

            if (this.ParseValueCore(value, targetType, converter1, dataTypeConverter, dataColumn, formatterCulture, out result))
            {
                return(result);
            }
            if (dataTypeConverter == null)
            {
                dataTypeConverter = converter1;
            }
            if (this.ParseWithTypeConverter(value, sourceType, dataTypeConverter, dataColumn, formatterCulture, out result))
            {
                return(result);
            }
            if (dataTypeConverter == converter1)
            {
                dataTypeConverter = converter2;
            }
            if (this.ParseWithTypeConverter(value, sourceType, dataTypeConverter, dataColumn, formatterCulture, out result))
            {
                return(result);
            }
            return(this.ChangeType(value, targetType, (IFormatProvider)formatterCulture));
        }
Пример #14
0
        private object FormatCore(
            object value,
            Type targetType,
            CultureInfo cultureInfo,
            IDataConversionInfoProvider dataColumn,
            bool checkForNullValue)
        {
            if (Convert.IsDBNull(value))
            {
                value = (object)null;
            }
            targetType = this.NullableUnwrap(targetType);
            TypeConverter dataTypeConverter = this.NullableUnwrap(dataColumn.DataTypeConverter);
            object        result            = (object)null;

            if (checkForNullValue && this.FormatNullValue(value, targetType, cultureInfo, dataTypeConverter, dataColumn, out result))
            {
                return(result);
            }
            if (value == null)
            {
                return((object)null);
            }
            Type          type       = value.GetType();
            TypeConverter converter1 = this.GetConverter(type);

            if (dataTypeConverter != null && dataTypeConverter != converter1)
            {
                if (dataTypeConverter.CanConvertTo(dataColumn as ITypeDescriptorContext, targetType))
                {
                    try
                    {
                        return(dataTypeConverter.ConvertTo(dataColumn as ITypeDescriptorContext, cultureInfo, value, targetType));
                    }
                    catch (FormatException ex)
                    {
                        if ((object)type == (object)targetType)
                        {
                            return(value);
                        }
                        throw ex;
                    }
                }
            }
            if ((object)targetType == (object)this.ToggleStateType && this.FormatToggleStateValue(value, type, dataTypeConverter, dataColumn, converter1, cultureInfo, out result))
            {
                return(result);
            }
            if ((object)targetType == (object)this.StringType)
            {
                return((object)this.FormatString(cultureInfo, dataColumn.FormatString, value));
            }
            if (targetType.IsAssignableFrom(type))
            {
                return(value);
            }
            if (converter1 != null && converter1 != dataTypeConverter)
            {
                if (converter1.CanConvertTo(dataColumn as ITypeDescriptorContext, targetType))
                {
                    try
                    {
                        return(converter1.ConvertTo(dataColumn as ITypeDescriptorContext, cultureInfo, value, targetType));
                    }
                    catch (FormatException ex)
                    {
                        if ((object)type == (object)targetType)
                        {
                            return(value);
                        }
                        throw ex;
                    }
                }
            }
            TypeConverter converter2 = this.GetConverter(targetType);

            if (converter2 != null && converter2.CanConvertFrom(dataColumn as ITypeDescriptorContext, type))
            {
                return(converter2.ConvertFrom(dataColumn as ITypeDescriptorContext, cultureInfo, value));
            }
            return(this.ChangeType(value, targetType, (IFormatProvider)cultureInfo));
        }