public IEnumerable <IDataTableAdapterVisitor> GetVisitors(IMasterDetailRowArguments masterDetailRowArguments) { var selectedItemType = masterDetailRowArguments.SelectedItem.GetType(); var detailAdapterItemType = masterDetailRowArguments.DataAdapter.UnderlyingTypeOfItem; var masterDetailConfiguration = _gridConfigurationProvider .GetGridConfigurationByType(selectedItemType) .FindRelationshipConfiguration(detailAdapterItemType); if (masterDetailRowArguments.DataAdapter is ILazyLoadedTableDataAdapter) { return(new List <IDataTableAdapterVisitor> { new LazyLoadingRouteParamVisitor(masterDetailConfiguration, masterDetailRowArguments, _propertyValueAccessorCache) }); } var filterVisitorType = typeof(FilterVisitor <>).MakeGenericType(detailAdapterItemType); var filterVisitor = Activator.CreateInstance(filterVisitorType, new object[] { masterDetailConfiguration, masterDetailRowArguments, _propertyValueAccessorCache }) as IDataTableAdapterVisitor; return(new List <IDataTableAdapterVisitor> { filterVisitor }); }
public FilterVisitor( IMasterDetailRelationship masterDetailRelationship, IMasterDetailRowArguments masterDetailRowArguments, ITypePropertyAccessorCache propertyValueAccessorCache) { _masterDetailRelationship = masterDetailRelationship ?? throw new ArgumentNullException(nameof(masterDetailRelationship)); _masterDetailRowArguments = masterDetailRowArguments ?? throw new ArgumentNullException(nameof(masterDetailRowArguments)); _propertyValueAccessorCache = propertyValueAccessorCache ?? throw new ArgumentNullException(nameof(propertyValueAccessorCache)); }
public DetailTableDataAdapter( IGridConfigurationProvider gridConfigurationProvider, IDetailDataAdapterVisitors detailDataAdapterVisitors, IMasterDetailRowArguments masterDetailRowArguments) { this.gridConfigurationProvider = gridConfigurationProvider ?? throw new ArgumentNullException(nameof(gridConfigurationProvider)); this.detailDataAdapterVisitors = detailDataAdapterVisitors ?? throw new ArgumentNullException(nameof(detailDataAdapterVisitors)); this.masterDetailRowArguments = masterDetailRowArguments ?? throw new ArgumentNullException(nameof(masterDetailRowArguments)); }
public LazyLoadingRouteParamVisitor( IMasterDetailRelationship masterDetailRelationship, IMasterDetailRowArguments masterDetailRowArguments, ITypePropertyAccessorCache propertyValueAccessorCache ) { this.masterDetailRelationship = masterDetailRelationship ?? throw new ArgumentNullException(nameof(masterDetailRelationship)); this.masterDetailRowArguments = masterDetailRowArguments ?? throw new ArgumentNullException(nameof(masterDetailRowArguments)); this.propertyValueAccessorCache = propertyValueAccessorCache ?? throw new ArgumentNullException(nameof(propertyValueAccessorCache)); }
public void SelectDataAdapter(IMasterDetailRowArguments masterDetailRowArguments) { if (masterDetailRowArguments is null) { throw new ArgumentNullException(nameof(masterDetailRowArguments)); } selectedDataAdapters[masterDetailRowArguments.SelectedItem] = tableDataAdapterProvider.ConvertToDetailTableDataAdapter( masterDetailRowArguments.DataAdapter, masterDetailRowArguments.SelectedItem); }
private IDataTableAdapterVisitor GetFilterVisitor(IMasterDetailRowArguments masterDetailRowArguments) { var selectedItemType = masterDetailRowArguments.SelectedItem.GetType(); var detailAdapterItemType = masterDetailRowArguments.DataAdapter.UnderlyingTypeOfItem; var masterDetailConfiguration = gridConfigurationProvider .GetGridConfigurationByType(selectedItemType) .FindRelationshipConfiguration(detailAdapterItemType); var constantValue = propertyValueAccessorCache .GetPropertyAccesor(selectedItemType) .GetValue(masterDetailRowArguments.SelectedItem, masterDetailConfiguration.MasterDetailConnection.MasterPropertyName); var parameter = Expression.Parameter(detailAdapterItemType, "x"); var member = Expression.Property(parameter, masterDetailConfiguration.MasterDetailConnection.ForeignPropertyName); var constant = Expression.Constant(constantValue); var body = Expression.Equal(member, constant); var filterVisitorType = typeof(FilterVisitor <>).MakeGenericType(detailAdapterItemType); var filterVisitor = Activator.CreateInstance(filterVisitorType, new object[] { body, parameter }) as IDataTableAdapterVisitor; return(filterVisitor); }
public IEnumerable <IDataTableAdapterVisitor> GetVisitors(IMasterDetailRowArguments masterDetailRowArguments) => new List <IDataTableAdapterVisitor> { GetFilterVisitor(masterDetailRowArguments) };