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
            });
        }
Пример #2
0
 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));
 }
Пример #3
0
 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));
 }
Пример #4
0
 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);
        }
Пример #6
0
        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);
        }
Пример #7
0
 public IEnumerable <IDataTableAdapterVisitor> GetVisitors(IMasterDetailRowArguments masterDetailRowArguments)
 => new List <IDataTableAdapterVisitor>
 {
     GetFilterVisitor(masterDetailRowArguments)
 };