/// <summary>
        /// Gets the display name for the specified property.
        /// </summary>
        /// <param name="pd">The property descriptor.</param>
        /// <param name="declaringType">The declaring type.</param>
        /// <returns>
        /// A display name string.
        /// </returns>
        protected virtual string GetDisplayName(PropertyDescriptor pd, Type declaringType)
        {
            var displayName = pd.GetDisplayName();

            if (this.ModifyCamelCaseDisplayNames && displayName == pd.Name)
            {
                displayName = StringUtilities.FromCamelCase(displayName);
            }

            return(displayName);
        }
Пример #2
0
        private void DiscoverRecordFields(Type recordType, ref int position, string declaringMember = null,
                                          bool optIn = false, PropertyDescriptor propDesc = null)
        {
            if (!recordType.IsDynamicType())
            {
                Type pt = null;
                if (optIn) //ChoTypeDescriptor.GetProperties(recordType).Where(pd => pd.Attributes.OfType<ChoCSVRecordFieldAttribute>().Any()).Any())
                {
                    foreach (PropertyDescriptor pd in ChoTypeDescriptor.GetProperties(recordType))
                    {
                        pt = pd.PropertyType.GetUnderlyingType();
                        if (!pt.IsSimple() && !typeof(IEnumerable).IsAssignableFrom(pt))
                        {
                            DiscoverRecordFields(pt, ref position, declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name), optIn);
                        }
                        else if (pd.Attributes.OfType <ChoCSVRecordFieldAttribute>().Any())
                        {
                            var obj = new ChoCSVRecordFieldConfiguration(pd.Name, pd.Attributes.OfType <ChoCSVRecordFieldAttribute>().First(), pd.Attributes.OfType <Attribute>().ToArray());
                            obj.FieldType          = pt;
                            obj.PropertyDescriptor = pd;
                            obj.DeclaringMember    = declaringMember == null ? null : "{0}.{1}".FormatString(declaringMember, pd.Name);
                            if (!CSVRecordFieldConfigurations.Any(c => c.Name == pd.Name))
                            {
                                CSVRecordFieldConfigurations.Add(obj);
                            }
                        }
                    }
                }
                else
                {
                    if (typeof(IList).IsAssignableFrom(recordType) &&
                        !typeof(ArrayList).IsAssignableFrom(recordType) &&
                        !recordType.IsInterface)
                    {
                        if (propDesc != null)
                        {
                            RangeAttribute dnAttr = propDesc.Attributes.OfType <RangeAttribute>().FirstOrDefault();

                            if (dnAttr == null)
                            {
                                ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, null, propDesc, null, declaringMember == null ? propDesc.GetDisplayName() : propDesc.GetDisplayName(String.Empty));
                                CSVRecordFieldConfigurations.Add(obj);
                            }
                            else if (dnAttr != null && dnAttr.Minimum.CastTo <int>() >= 0 && dnAttr.Maximum.CastTo <int>() > 0 &&
                                     dnAttr.Minimum.CastTo <int>() <= dnAttr.Maximum.CastTo <int>())
                            {
                                recordType = recordType.GetItemType().GetUnderlyingType();

                                if (recordType.IsSimple())
                                {
                                    for (int range = dnAttr.Minimum.CastTo <int>(); range <= dnAttr.Maximum.CastTo <int>(); range++)
                                    {
                                        ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, null, propDesc, range);
                                        //if (!CSVRecordFieldConfigurations.Any(c => c.Name == (declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name))))
                                        CSVRecordFieldConfigurations.Add(obj);
                                    }
                                }
                                else
                                {
                                    for (int range = dnAttr.Minimum.CastTo <int>(); range <= dnAttr.Maximum.CastTo <int>(); range++)
                                    {
                                        foreach (PropertyDescriptor pd in ChoTypeDescriptor.GetProperties(recordType))
                                        {
                                            pt = pd.PropertyType.GetUnderlyingType();
                                            if (pt != typeof(object) && !pt.IsSimple() /*&& !typeof(IEnumerable).IsAssignableFrom(pt)*/)
                                            {
                                                //DiscoverRecordFields(pt, ref position, declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name), optIn, pd);
                                            }
                                            else
                                            {
                                                ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, declaringMember, pd, range, propDesc.GetDisplayName());

                                                //if (!CSVRecordFieldConfigurations.Any(c => c.Name == (declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name))))
                                                CSVRecordFieldConfigurations.Add(obj);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else if (recordType.IsGenericType && recordType.GetGenericTypeDefinition() == typeof(Dictionary <,>)
                             /*&& typeof(string) == recordType.GetGenericArguments()[0]*/)
                    {
                        if (propDesc != null)
                        {
                            ChoDictionaryKeyAttribute[] dnAttrs = propDesc.Attributes.OfType <ChoDictionaryKeyAttribute>().ToArray();
                            if (dnAttrs.IsNullOrEmpty())
                            {
                                ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, null, propDesc, null, declaringMember == null ? propDesc.GetDisplayName() : propDesc.GetDisplayName(String.Empty));
                                CSVRecordFieldConfigurations.Add(obj);
                            }
                            else
                            {
                                var keys = (from a in dnAttrs
                                            where a != null && !a.Keys.IsNullOrWhiteSpace()
                                            select a.Keys.SplitNTrim()).SelectMany(a => a).ToArray();

                                foreach (var key in keys)
                                {
                                    if (!key.IsNullOrWhiteSpace())
                                    {
                                        ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, null, propDesc, dictKey: key);

                                        //if (!CSVRecordFieldConfigurations.Any(c => c.Name == (declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name))))
                                        CSVRecordFieldConfigurations.Add(obj);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if (recordType == typeof(object)
                            //|| typeof(IEnumerable).IsAssignableFrom(recordType)
                            //|| typeof(ICollection).IsAssignableFrom(recordType)
                            )
                        {
                        }
                        else if (recordType.IsSimple())
                        {
                            ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, declaringMember, propDesc);
                            if (!CSVRecordFieldConfigurations.Any(c => c.Name == propDesc.Name))
                            {
                                CSVRecordFieldConfigurations.Add(obj);
                            }
                        }
                        else
                        {
                            foreach (PropertyDescriptor pd in ChoTypeDescriptor.GetProperties(recordType))
                            {
                                pt = pd.PropertyType.GetUnderlyingType();

                                if (pt == typeof(object) ||
                                    typeof(ArrayList).IsAssignableFrom(pt) ||
                                    typeof(Hashtable).IsAssignableFrom(pt)
                                    )
                                {
                                    continue;
                                }

                                if (pt != typeof(object) && !pt.IsSimple() /*&& !typeof(IEnumerable).IsAssignableFrom(pt)*/)
                                {
                                    if (propDesc == null)
                                    {
                                        DiscoverRecordFields(pt, ref position, declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name), optIn, pd);
                                    }
                                    else
                                    {
                                        DiscoverRecordFields(pt, ref position, declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name), optIn, pd);
                                    }
                                }
                                else
                                {
                                    ChoCSVRecordFieldConfiguration obj = NewFieldConfiguration(ref position, declaringMember, pd, null, declaringMember == null ? propDesc.GetDisplayName() : propDesc.GetDisplayName(String.Empty));
                                    if (!CSVRecordFieldConfigurations.Any(c => c.Name == (declaringMember == null ? pd.Name : "{0}.{1}".FormatString(declaringMember, pd.Name))))
                                    {
                                        CSVRecordFieldConfigurations.Add(obj);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
        public PropertyDescriptorDataModelField(PropertyDescriptor pd)
        {
            #region 基础属性

            p_InnerExtend.SetExtendPropertyValue("Name", pd.GetNameForDatabase());

            p_InnerExtend.SetExtendPropertyValue("Title", pd.GetDisplayName());

            p_InnerExtend.SetExtendPropertyValue("Description", pd.GetDescription());

            Type clrType = pd.PropertyType.GetTypeIfIsNullable();

            p_InnerExtend.SetExtendPropertyValue("FieldDbType", clrType.GetDbType());

            #endregion

            #region 扩展属性

            DataModelHelper.SetExtendProerty_IsSoftDeleteField(p_InnerExtend, pd);

            DataModelHelper.SetExtendProerty_RowVersion(p_InnerExtend, pd);

            DataModelHelper.SetExtendProerty_PropertyDescription(p_InnerExtend, pd);

            DataModelHelper.SetExtendProerty_ClrType(p_InnerExtend, clrType);

            DataModelHelper.SetExtendProperty_CanbeNull(p_InnerExtend, pd);

            DataModelHelper.SetExtendProperty_PrimaryKey(p_InnerExtend, pd);

            DataModelHelper.SetExtendProperty_IndexKey(p_InnerExtend, pd);

            DataModelHelper.SetExtendProerty_DbFieldValueConvertType(p_InnerExtend, pd);

            DataModelHelper.SetExtendProperty_DefaultValue(p_InnerExtend, pd);
            switch (clrType.GetDbType())
            {
            case DbType.String:
            {
                DataModelHelper.SetExtendProperty_MaxLength(p_InnerExtend, pd, 50);
                break;
            }

            case DbType.Decimal:
            {
                DataModelHelper.SetExtendProperty_DecimalDefine(p_InnerExtend, pd, new DecimalDefine()
                    {
                        DecimalLength = 18, DotLength = 2
                    });
                break;
            }

            case DbType.Int16:
            case DbType.Int32:
            case DbType.Int64:
            case DbType.UInt16:
            case DbType.UInt32:
            case DbType.UInt64:
            {
                DataModelHelper.SetExtendProperty_DbGeneratedDefine(p_InnerExtend, pd);
                break;
            }
            }
            //数字是否超出范围
            NumberType nt = DataValueParase.IsNumberType(clrType);
            if ((nt != NumberType.Unkown) || (clrType == typeof(DateTime) || clrType == typeof(TimeSpan)))
            {
                DataModelHelper.SetExtendProperty_MinMaxExpress(p_InnerExtend, pd);
            }
            #endregion
        }