コード例 #1
0
 /// <summary>
 /// 获取单元格的过滤器特性
 /// </summary>
 /// <typeparam name="T">过滤器特性类型</typeparam>
 /// <param name="cell">单元格</param>
 /// <param name="typeFilterInfo">类型过滤器信息</param>
 public static T GetFilterAttribute <T>(this ICell cell, TypeFilterInfo typeFilterInfo) where T : FilterAttributeBase
 {
     return(typeFilterInfo.PropertyFilterInfos
            .SingleOrDefault(x =>
                             x.PropertyName.Equals(cell.PropertyName, StringComparison.CurrentCultureIgnoreCase))?.Filters
            ?.SingleOrDefault(x => x.GetType() == typeof(T)) as T);
 }
コード例 #2
0
        /// <summary>
        /// Excel表头与模板类匹配获取所有过滤器
        /// </summary>
        /// <typeparam name="TTemplate"></typeparam>
        /// <param name="headerRow"></param>
        /// <returns></returns>
        public static List <IFilter> CreateFilters <TTemplate>(ExcelHeaderRow headerRow)
        {
            Type templateType = typeof(TTemplate);
            var  key          = templateType;

            if (Table[key] != null)
            {
                return((List <IFilter>)Table[key]);
            }

            List <IFilter>             filters        = new List <IFilter>();
            List <BaseFilterAttribute> attrs          = new List <BaseFilterAttribute>();
            TypeFilterInfo             typeFilterInfo = TypeFilterInfoFactory.CreateInstance(typeof(TTemplate), headerRow);

            typeFilterInfo.PropertyFilterInfos.ForEach(a => a.FilterAttrs.ForEach(f => attrs.Add(f)));

            attrs.Distinct(new FilterAttributeComparer()).ToList().ForEach
                (a =>
            {
                var filter = FilterFactory.CreateInstance(a.GetType());
                if (filter != null)
                {
                    filters.Add(filter);
                }
            });

            Table[key] = filters;
            return(filters);
        }
コード例 #3
0
        /// <summary>
        /// 创建模板类的过滤器集合
        /// </summary>
        /// <returns></returns>
        public static List <IFilter> CreateFilters <TExcelTemplate>() where TExcelTemplate : class, new()
        {
            List <IFilter> filterList     = new List <IFilter>();
            TypeFilterInfo typeFilterInfo = TypeFilterInfoFactory.CreateInstance <TExcelTemplate>();
            var            attrs          = typeFilterInfo.PropertyFilterInfos.SelectMany(pfi => pfi.Filters).ToList();

            attrs.Distinct(new BaseFilterAttrEqualCompare()).ToList().ForEach(bfa =>
            {
                var filter = FilterFactory.CreateInstance(bfa);
                if (filter != null)
                {
                    filterList.Add(filter);
                }
            });
            return(filterList);
        }
コード例 #4
0
        /// <summary>
        /// 创建 模板类过滤信息
        /// </summary>
        /// <typeparam name="TExcelTemplate">Excel配置模板类</typeparam>
        /// <returns>模板类过滤信息</returns>
        public static TypeFilterInfo CreateInstance <TExcelTemplate>()
            where TExcelTemplate : class, new()
        {
            TypeFilterInfo typeFilterInfo = new TypeFilterInfo();
            var            propertys      = typeof(TExcelTemplate).GetProperties().Where(p => p.IsDefined(typeof(ColNameAttribute))).ToList();

            propertys.ForEach(p =>
            {
                typeFilterInfo.PropertyFilterInfos.Add(new PropertyFilterInfo
                {
                    PropertyName = p?.Name,
                    Filters      = p.GetCustomAttributes <BaseFilterAttribute>().ToList()
                });
            });
            return(typeFilterInfo);
        }
コード例 #5
0
        /// <summary>
        /// 获取模板类过滤器信息
        /// </summary>
        /// <param name="importType">导入模板类</param>
        /// <param name="excelHeaderRow">Excel表头</param>
        /// <returns>过滤器信息</returns>
        public static TypeFilterInfo CreateInstance(Type importType, ExcelHeaderRow excelHeaderRow)
        {
            if (importType == null)
            {
                throw new ArgumentNullException("importDTOType");
            }

            if (excelHeaderRow == null)
            {
                throw new ArgumentNullException("excelHeaderRow");
            }

            var key = importType;

            if (Table[key] != null)
            {
                return((TypeFilterInfo)Table[key]);
            }

            TypeFilterInfo typeFilterInfo = new TypeFilterInfo()
            {
                PropertyFilterInfos = new List <PropertyFilterInfo>()
                {
                }
            };

            IEnumerable <PropertyInfo> props = importType.GetProperties().ToList().Where(p => p.IsDefined(typeof(ColNameAttribute)));

            props.ToList().ForEach(p =>
            {
                typeFilterInfo.PropertyFilterInfos.Add(
                    new PropertyFilterInfo
                {
                    PropertyName = p.Name,
                    FilterAttrs  = p.GetCustomAttributes <BaseFilterAttribute>()?.ToList()
                });
            });

            Table[key] = typeFilterInfo;

            return(typeFilterInfo);
        }
コード例 #6
0
        /// <summary>
        /// 创建类型过滤器信息实例
        /// </summary>
        /// <param name="type">类型</param>
        public static TypeFilterInfo CreateInstance(Type type)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }
            if (TypeFilterDict.ContainsKey(type))
            {
                return(TypeFilterDict[type]);
            }
            var typeFilterInfo = new TypeFilterInfo();
            var props          = type.GetProperties().Where(x => x.IsDefined(typeof(ColumnNameAttribute))).ToList();

            props.ForEach(item =>
            {
                typeFilterInfo.PropertyFilterInfos.Add(new PropertyFilterInfo()
                {
                    PropertyName = item.Name,
                    Filters      = item.GetCustomAttributes <FilterAttributeBase>().ToList()
                });
            });
            TypeFilterDict[type] = typeFilterInfo;
            return(typeFilterInfo);
        }
コード例 #7
0
 /// <summary>
 /// 获取某单元格的某校验类型集合
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="col"></param>
 /// <param name="typeFilterInfo"></param>
 /// <returns></returns>
 public static List <T> GetFilterAttrs <T>(this ExcelDataCol col, TypeFilterInfo typeFilterInfo)
     where T : BaseFilterAttribute
 {
     return(typeFilterInfo.PropertyFilterInfos.SingleOrDefault(a => a.PropertyName.Equals(col.PropertyName, StringComparison.CurrentCultureIgnoreCase))?.
            FilterAttrs?.Where(e => e.GetType() == typeof(T)).Cast <T>().ToList());
 }
コード例 #8
0
        /// <summary>
        /// 获取该属性的指定的特性
        /// </summary>
        /// <typeparam name="TAttribute"></typeparam>
        /// <param name="excelDataCol"></param>
        /// <param name="typeFilterInfo"></param>
        /// <returns></returns>
        public static TAttribute GetAttribute <TAttribute>(this ExcelDataCol excelDataCol, TypeFilterInfo typeFilterInfo)
            where TAttribute : BaseFilterAttribute
        {
            PropertyFilterInfo propertyFilter = typeFilterInfo.PropertyFilterInfos.FirstOrDefault(pfi => pfi.PropertyName == excelDataCol.PropertyName);

            if (propertyFilter == null)
            {
                return(null);
            }
            var basefilterAttr = propertyFilter.Filters.FirstOrDefault(f => f.GetType() == typeof(TAttribute));

            return((TAttribute)basefilterAttr);
        }