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