Пример #1
0
        /// <summary>
        /// 将存储的数据转换为指定的类型。
        /// </summary>
        /// <param name="value">要转换的值,格式为 name,size[unit][,style]。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>一个 <see cref="Font"/> 对象。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 <see cref="Font"/> 类型的对象转换为指定的 dbType 数据时,引发此异常。</exception>
        public object ConvertFrom(object value, DbType dbType = DbType.String)
        {
            if (!dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(Font), dbType);
            }

            if (value.IsNullOrEmpty())
            {
                return(null);
            }

            var          array = value.ToString().Split(',');
            var          style = FontStyle.Regular;
            float        size;
            GraphicsUnit unit;

            ParseFontSizeAndUnit(array[1], out size, out unit);

            if (array.Length == 3)
            {
                style = ParseFontStyle(array[2]);
            }

            return(new Font(array[0], size, style, unit));
        }
Пример #2
0
        /// <summary>
        /// 将存储的数据转换为指定的类型。
        /// </summary>
        /// <param name="value">要转换的值。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>一个数组。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将数组转换为指定的 dbType 数据时,引发此异常。</exception>
        public object ConvertFrom(object value, DbType dbType = DbType.String)
        {
            if (value == null || value == DBNull.Value)
            {
                return(null);
            }

            if (dbType.IsStringDbType())
            {
                if (elementType == typeof(byte))
                {
                    try
                    {
                        return(Convert.FromBase64String(value.ToString()));
                    }
                    catch
                    {
                        return(null);
                    }
                }
                else
                {
                    var array  = value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.ToType(elementType)).ToArray();
                    var result = Array.CreateInstance(elementType, array.Length);
                    Array.Copy(array, result, array.Length);

                    return(result);
                }
            }

            return(value);
        }
Пример #3
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的数组。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns></returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为数组时,引发此异常。</exception>
        public object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (dbType.IsStringDbType())
            {
#if !N35
                if (elementType == typeof(string))
                {
                    return(string.Join(",", ((object[])value).Select(s => "'" + s + "'")));
                }
                else
                {
                    return(string.Join(",", (object[])value));
                }
#else
                if (elementType == typeof(string))
                {
                    return(string.Join(",", ((object[])value).Select(s => "'" + s + "'").ToArray()));
                }
                else
                {
                    return(string.Join(",", ((object[])value).Select(s => s.ToString()).ToArray()));
                }
#endif
            }

            return(value);
        }
Пример #4
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的 <see cref="CodedData"/> 对象。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>表示 <see cref="CodedData"/> 的字节数组。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="CodedData"/> 类型的对象时,引发此异常。</exception>
        public virtual object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (dbType != DbType.Binary && !dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(CodedData), dbType);
            }

            var data = value as CodedData;

            if (dbType == DbType.Binary)
            {
                return(data == null ? new byte[0] : EncodeDataToBytes(data));
            }
            else if (dbType.IsStringDbType())
            {
                return(data == null ? string.Empty : EncodeDataToString(data));
            }

            return(null);
        }
Пример #5
0
        /// <summary>
        /// 将存储的数据转换为指定的类型。
        /// </summary>
        /// <param name="value">要转换的值。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>一个数组。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将数组转换为指定的 dbType 数据时,引发此异常。</exception>
        public object ConvertFrom(object value, DbType dbType = DbType.String)
        {
            if (dbType.IsStringDbType())
            {
                var array  = value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.ToType(elementType)).ToArray();
                var result = Array.CreateInstance(elementType, array.Length);
                Array.Copy(array, result, array.Length);
                return(result);
            }

            return(value);
        }
Пример #6
0
        /// <summary>
        /// 将存储的数据转换为指定的类型。
        /// </summary>
        /// <param name="value">要转换的值,格式为 x,y。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>一个 <see cref="Point"/> 对象。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 <see cref="Point"/> 类型的对象转换为指定的 dbType 数据时,引发此异常。</exception>
        public object ConvertFrom(object value, DbType dbType = DbType.String)
        {
            if (!dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(Point), dbType);
            }

            if (value.IsNullOrEmpty())
            {
                return(Point.Empty);
            }

            var array = value.ToString().Split(',');

            return(new Point(Convert.ToInt32(array[0]), Convert.ToInt32(array[1])));
        }
Пример #7
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的数组。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns></returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为数组时,引发此异常。</exception>
        public object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (dbType.IsStringDbType() && value != null)
            {
                if (elementType == typeof(byte))
                {
                    return(Convert.ToBase64String((byte[])value));
                }
                else
                {
                    return(BuildString((Array)value));
                }
            }

            return(value);
        }
Пример #8
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的 <see cref="Rectangle"/> 对象。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>使用 x,y,w,h 表示 <see cref="Rectangle"/> 对象的字符串。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Rectangle"/> 类型的对象时,引发此异常。</exception>
        public object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (!dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(Rectangle), dbType);
            }

            if (value == null)
            {
                return(string.Empty);
            }

            var rect = (Rectangle)value;

            return(string.Join(",", new[] { rect.X, rect.Y, rect.Width, rect.Height }));
        }
Пример #9
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的 <see cref="Point"/> 对象。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>使用 x,y 表示 <see cref="Point"/> 对象的字符串。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Point"/> 类型的对象时,引发此异常。</exception>
        public object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (!dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(Point), dbType);
            }

            if (value == null)
            {
                return(string.Empty);
            }

            var point = (Point)value;

            return(string.Join(",", new[] { point.X, point.Y }));
        }
Пример #10
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的 <see cref="Size"/> 对象。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>使用 w,h 表示 <see cref="Size"/> 对象的字符串。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Size"/> 类型的对象时,引发此异常。</exception>
        public object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (!dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(Size), dbType);
            }

            if (value == null || !value.Is <Size>())
            {
                return(string.Empty);
            }

            var size = (Size)value;

            return(string.Join(",", new[] { size.Width, size.Height }));
        }
Пример #11
0
        /// <summary>
        /// 将存储的数据转换为指定的类型。
        /// </summary>
        /// <param name="value">要转换的值。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>一个 <see cref="CodedData"/> 对象。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 <see cref="CodedData"/> 类型的对象转换为指定的 dbType 数据时,引发此异常。</exception>
        public virtual object ConvertFrom(object value, DbType dbType = DbType.String)
        {
            if (value == null || value == DBNull.Value)
            {
                return(null);
            }

            if (dbType == DbType.Binary)
            {
                return(DecodeDataFromBytes((byte[])value));
            }
            else if (dbType.IsStringDbType())
            {
                return(DecodeDataFromString(value.ToString()));
            }

            return(null);
        }
Пример #12
0
        /// <summary>
        /// 将特殊对象转换为可存储到数据库的类型。
        /// </summary>
        /// <param name="value">要存储的 <see cref="Font"/> 对象。</param>
        /// <param name="dbType">数据列类型。</param>
        /// <returns>表示 <see cref="Font"/> 对象的字符串。</returns>
        /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Font"/> 类型的对象时,引发此异常。</exception>
        /// <remarks>如宋体12px,粗休删除线,可以表示为 宋体,12px,BU。</remarks>
        public object ConvertTo(object value, DbType dbType = DbType.String)
        {
            if (!dbType.IsStringDbType())
            {
                throw new ConverterNotSupportedException(typeof(Font), dbType);
            }

            if (value == null)
            {
                return(string.Empty);
            }

            var font = value as Font;

            if (font == null)
            {
                return(string.Empty);
            }

            var num = 3;

            if (font.Style != FontStyle.Regular)
            {
                num++;
            }

            var strArray = new string[num];
            var num2     = 0;

            strArray[num2++] = font.Name;
            strArray[num2++] = font.Size + GetUnitFlag(font.Unit);
            if (font.Style != FontStyle.Regular)
            {
                strArray[num2] = GetStyleFlag(font.Style);
            }

            return(string.Join(",", strArray));
        }