EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

XPO中的颜色属性

本主题演示了两种在eXpressPersistent Objects ORM管理的数据库中存储System.Drawing.Color属性值的方法。

  1. 第一种方法是实现值转换器

    using System;
    using System.Drawing;
    using DevExpress.Xpo.Metadata;
    // ...
    public class ColorValueConverter : ValueConverter {
        public override Type StorageType {
            get { return typeof(Int32); }
        }
        public override object ConvertToStorageType(object value) {
            if(!(value is Color)) return null;
            Color color = (Color)value;
            return color.IsEmpty ? -1 : color.ToArgb();
        }
        public override object ConvertFromStorageType(object value) {
            if(!(value is Int32)) return null;
            Int32 argbCode = Convert.ToInt32(value);
            return argbCode == -1 ? Color.Empty : Color.FromArgb(argbCode);
        }
    }
    

    之后,装饰需要使用ValueConverterAttribute进行转换的属性,并且每次尝试存储或获取System.Drawing.Color类型的值时都会调用该转换器。

    using DevExpress.Xpo;
    using System.Drawing;
    //...
    private Color color;
    [ValueConverter(typeof(ColorValueConverter))]
    public Color Color {
        get { return color; }
        set { SetPropertyValue(nameof(Color), ref color, value); }
    }
    
  2. 另一种方法是在使用get和set访问器的属性实现上将System.Drawing.Color类型转换为System.Int32,如下所示。移动应用程序不支持此方法。

    using DevExpress.Xpo;
    using System.Drawing;
    //...
    [Persistent("Color")]
    private Int32 color;
    [NonPersistent]
    public Color Color {
        get { return Color.FromArgb(color); }
        set {
            color = value.ToArgb();
            OnChanged(nameof(Color));
        }
    }
    
    注意

    如果类型的类没有适当的转换方法(在这种情况下为Color.ToArgb),则实现一个类型转换器,并在需要存储的类型与ORM友好的类型之间进行值转换时随时使用它。

转载保留此链接,注明出处