using InABox.Core; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace InABox.DynamicGrid { public abstract class DynamicCrossJoinGrid : DynamicDataGrid where TEntity : Entity, IRemotable, IPersistent, new() where TLeft : Entity { public TLeft? Left { get; set; } public abstract Expression> LeftMapping { get; } public abstract Expression> LeftProperty { get; } public DynamicCrossJoinGrid() { Options.BeginUpdate().Clear().Add(DynamicGridOption.SelectColumns).EndUpdate(); } protected override void GenerateColumns(DynamicGridColumns columns) { base.GenerateColumns(columns); var prefix = $"{typeof(TLeft).Name}."; columns.RemoveAll(x => x.ColumnName.StartsWith(prefix)); } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { var filter = new Filter(); filter.Expression = CoreUtils.ExtractMemberExpression(LeftMapping); filter.Operator = Operator.IsEqualTo; filter.Value = CoreUtils.GetPropertyValue(Left, CoreUtils.GetFullPropertyName(LeftProperty, ".")); criteria.Add(filter); base.Reload(criteria, columns, ref sort, action); } } }