/// <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); }
/// <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); }
/// <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); }