/// <summary>
    /// 通过特定类型模型获取模型属性集合
    /// </summary>
    /// <param name="type"></param>
    /// <param name="source"></param>
    /// <returns></returns>
    public static IEnumerable <ITableColumn> GetProperties(Type type, IEnumerable <ITableColumn>?source = null)
    {
        var cols      = new List <ITableColumn>(50);
        var attrModel = type.GetCustomAttribute <AutoGenerateClassAttribute>(true);
        var props     = type.GetProperties();

        foreach (var prop in props)
        {
            ITableColumn?tc;
            var          attr = prop.GetCustomAttribute <AutoGenerateColumnAttribute>(true);

            // Issue: 增加定义设置标签 AutoGenerateClassAttribute
            // https://gitee.com/LongbowEnterprise/BootstrapBlazor/issues/I381ED
            var displayName = attr?.Text ?? Utility.GetDisplayName(type, prop.Name);
            if (attr == null)
            {
                tc = new InternalTableColumn(prop.Name, prop.PropertyType, displayName);

                if (attrModel != null)
                {
                    tc.InheritValue(attrModel);
                }
            }
            else
            {
                if (attr.Ignore)
                {
                    continue;
                }

                attr.Text         = displayName;
                attr.FieldName    = prop.Name;
                attr.PropertyType = prop.PropertyType;

                if (attrModel != null)
                {
                    attr.InheritValue(attrModel);
                }
                tc = attr;
            }

            // 替换属性 手写优先
            var col = source?.FirstOrDefault(c => c.GetFieldName() == tc.GetFieldName());
            if (col != null)
            {
                tc.CopyValue(col);
            }
            cols.Add(tc);
        }

        return(cols.Where(a => a.Order > 0).OrderBy(a => a.Order)
               .Concat(cols.Where(a => a.Order == 0))
               .Concat(cols.Where(a => a.Order < 0).OrderBy(a => a.Order)));
    }
Пример #2
0
 /// <summary>
 /// 通过指定 Model 获得 IEditorItem 集合方法
 /// </summary>
 /// <param name="predicate"></param>
 /// <returns></returns>
 public static IEnumerable <ITableColumn> GenerateColumns <TModel>(Func <ITableColumn, bool> predicate) => InternalTableColumn.GetProperties <TModel>().Where(predicate);