Пример #1
0
        internal static bool IsFilterableColumn(IMetaColumn column, IPrincipal user)
        {
            DisplayAttribute attribute = column.Attributes.FirstOrDefault <DisplayAttribute>();

            if ((attribute != null) && attribute.GetAutoGenerateFilter().HasValue)
            {
                return(attribute.GetAutoGenerateFilter().Value);
            }
            if (!string.IsNullOrEmpty(column.FilterUIHint))
            {
                return(true);
            }
            if (!column.Scaffold)
            {
                return(false);
            }
            if (column.IsCustomProperty)
            {
                return(false);
            }
            IMetaForeignKeyColumn column2 = column as IMetaForeignKeyColumn;

            if (column2 != null)
            {
                return(column2.ParentTable.CanRead(user));
            }
            return((column.ColumnType == typeof(bool)) || (column.GetEnumType() != null));
        }
Пример #2
0
        internal static bool IsColumnInDictionary(IMetaColumn column, IDictionary <string, object> values)
        {
            if (column == null)
            {
                throw new ArgumentNullException("column");
            }
            if (values == null)
            {
                throw new ArgumentNullException("values");
            }
            IMetaForeignKeyColumn foreignKeyColumn = column as IMetaForeignKeyColumn;

            if (foreignKeyColumn != null)
            {
                return(foreignKeyColumn.ForeignKeyNames.All(fkName => values.ContainsKey(fkName)));
            }
            return(values.ContainsKey(column.Name));
        }
Пример #3
0
        public static IQueryable BuildSortQueryable(IQueryable query, IMetaTable table)
        {
            IMetaColumn sortColumn = table.SortColumn;

            if (sortColumn.IsCustomProperty)
            {
                // An extra property can't be optimized on server
                //
                var data = query.OfType <object>().AsEnumerable();
                Func <object, object> lambda = row => DataBinder.GetPropertyValue(row, sortColumn.Name);
                if (table.SortDescending)
                {
                    query = data.OrderByDescending <object, object>(lambda).AsQueryable();
                }
                else
                {
                    query = data.OrderBy <object, object>(lambda).AsQueryable();
                }
            }
            else
            {
                // Build custom expression to optimize sorting on server
                //
                var parameter = Expression.Parameter(query.ElementType, "row");
                LambdaExpression      lambda           = null;
                IMetaForeignKeyColumn foreignKeyColumn = sortColumn as IMetaForeignKeyColumn;
                if (foreignKeyColumn != null)
                {
                    // e.g. product => product.Category.CategoryName
                    var foreignKeySortColumn = foreignKeyColumn.ParentTable.SortColumn;
                    lambda = Expression.Lambda(Expression.Property(Expression.Property(parameter, sortColumn.Name), foreignKeySortColumn.Name), parameter);
                }
                else
                {
                    // e.g. product => product.ProductName
                    lambda = Expression.Lambda(Expression.Property(parameter, sortColumn.Name), parameter);
                }
                string ordering   = table.SortDescending ? "OrderByDescending" : "OrderBy";
                var    expression = Expression.Call(typeof(Queryable), ordering, new Type[] { query.ElementType, lambda.Body.Type }, query.Expression, lambda);
                query = query.Provider.CreateQuery(expression);
            }
            return(query);
        }
Пример #4
0
        private bool IsScaffoldColumn(IMetaColumn column, DataBoundControlMode mode, ContainerType containerType)
        {
            if (!column.Scaffold)
            {
                return(false);
            }
            if (mode == DataBoundControlMode.Insert)
            {
                IMetaChildrenColumn column3 = column as IMetaChildrenColumn;
                if ((column3 != null) && !column3.IsManyToMany)
                {
                    return(false);
                }
            }
            IMetaForeignKeyColumn column2 = column as IMetaForeignKeyColumn;

            if ((column2 != null) && !column2.ParentTable.CanRead(this.Context.User))
            {
                return(false);
            }
            return(true);
        }