Ejemplo n.º 1
0
        /// <summary>
        ///     添加数据行错误
        /// </summary>
        /// <param name="rowIndex"></param>
        /// <param name="importerHeaderInfo"></param>
        /// <param name="errorMessage"></param>
        protected virtual void AddRowDataError(int rowIndex, ImporterHeaderInfo importerHeaderInfo,
                                               string errorMessage = "数据格式无效!")
        {
            var rowError = GetDataRowErrorInfo(rowIndex);

            rowError.FieldErrors.Add(importerHeaderInfo.ExporterHeader.Name, errorMessage);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     添加数据行错误
        /// </summary>
        /// <param name="rowIndex"></param>
        /// <param name="importerHeaderInfo"></param>
        /// <param name="errorMessage"></param>
        protected virtual void AddRowDataError(int rowIndex, ImporterHeaderInfo importerHeaderInfo,
                                               string errorMessage = "数据格式无效!")
        {
            var rowError = ImportResult.RowErrors.FirstOrDefault(p => p.RowIndex == rowIndex);

            if (rowError == null)
            {
                rowError = new DataRowErrorInfo
                {
                    RowIndex = rowIndex
                };
                ImportResult.RowErrors.Add(rowError);
            }

            rowError.FieldErrors.Add(importerHeaderInfo.ExporterHeader.Name, errorMessage);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     解析头部
        /// </summary>
        /// <returns></returns>
        /// <exception cref="ArgumentException">导入实体没有定义ImporterHeader属性</exception>
        protected virtual bool ParseImporterHeader()
        {
            ImporterHeaderInfos = new List <ImporterHeaderInfo>();
            var objProperties = typeof(T).GetProperties();

            if (objProperties.Length == 0)
            {
                return(false);
            }

            foreach (var propertyInfo in objProperties)
            {
                //TODO:简化并重构
                //如果不设置,则自动使用默认定义
                var importerHeaderAttribute =
                    (propertyInfo.GetCustomAttributes(typeof(ImporterHeaderAttribute), true) as
                     ImporterHeaderAttribute[])?.FirstOrDefault() ?? new ImporterHeaderAttribute
                {
                    Name = propertyInfo.GetDisplayName() ?? propertyInfo.Name
                };

                if (string.IsNullOrWhiteSpace(importerHeaderAttribute.Name))
                {
                    importerHeaderAttribute.Name = propertyInfo.GetDisplayName() ?? propertyInfo.Name;
                }

                //忽略字段处理
                if (importerHeaderAttribute.IsIgnore)
                {
                    continue;
                }

                var colHeader = new ImporterHeaderInfo
                {
                    IsRequired     = propertyInfo.IsRequired(),
                    PropertyName   = propertyInfo.Name,
                    ExporterHeader = importerHeaderAttribute
                };
                ImporterHeaderInfos.Add(colHeader);

                #region 处理值映射

                var mappings = propertyInfo.GetAttributes <ValueMappingAttribute>().ToList();
                foreach (var mappingAttribute in mappings.Where(mappingAttribute =>
                                                                !colHeader.MappingValues.ContainsKey(mappingAttribute.Text)))
                {
                    colHeader.MappingValues.Add(mappingAttribute.Text, mappingAttribute.Value);
                }

                //如果存在自定义映射,则不会生成默认映射
                if (mappings.Any())
                {
                    continue;
                }

                //为bool类型生成默认映射
                switch (propertyInfo.PropertyType.GetCSharpTypeName())
                {
                case "Boolean":
                case "Nullable<Boolean>":
                {
                    if (!colHeader.MappingValues.ContainsKey("是"))
                    {
                        colHeader.MappingValues.Add("是", true);
                    }
                    if (!colHeader.MappingValues.ContainsKey("否"))
                    {
                        colHeader.MappingValues.Add("否", false);
                    }
                    break;
                }
                }

                var type       = propertyInfo.PropertyType;
                var isNullable = type.IsNullable();
                if (isNullable)
                {
                    type = type.GetNullableUnderlyingType();
                }
                //为枚举类型生成默认映射
                if (type.IsEnum)
                {
                    var values = type.GetEnumTextAndValues();
                    foreach (var value in values.Where(value => !colHeader.MappingValues.ContainsKey(value.Key)))
                    {
                        colHeader.MappingValues.Add(value.Key, value.Value);
                    }

                    if (isNullable)
                    {
                        if (!colHeader.MappingValues.ContainsKey(string.Empty))
                        {
                            colHeader.MappingValues.Add(string.Empty, null);
                        }
                    }
                }

                #endregion
            }

            return(true);
        }