using InABox.Core; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; 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; } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.Clear(); options.SelectColumns = true; } public override DynamicGridColumns GenerateColumns() { var columns = base.GenerateColumns(); var prefix = $"{typeof(TLeft).Name}."; columns.RemoveAll(x => x.ColumnName.StartsWith(prefix)); return columns; } protected override void Reload( Filters criteria, Columns columns, ref SortOrder? sort, CancellationToken token, 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, token, action); } }