public void AddGridViewComponent(ITableDataAdapter tableDataAdapter)
 {
     RendererTreeBuilder.OpenComponent(typeof(GridViewGroup <>).MakeGenericType(tableDataAdapter.UnderlyingTypeOfItem));
     RendererTreeBuilder.AddAttribute("DataAdapter", tableDataAdapter);
     RendererTreeBuilder.AddAttribute(nameof(ITableDataSet.PageableOptions.PageSize), GridConfiguration.GroupingOptions.GroupPageSize);
     RendererTreeBuilder.CloseComponent();
 }
Esempio n. 2
0
        private void RenderTabs(
            GridRendererContext rendererContext,
            PermissionContext permissionContext,
            IMasterTableDataSet masterTableDataSet,
            ITableDataAdapter selectedDataAdapter)
        {
            foreach (var dataAdapter in masterTableDataSet.DetailDataAdapters)
            {
                RenderTab(rendererContext, masterTableDataSet, selectedDataAdapter, dataAdapter);
            }

            if (rendererContext.ShowExplicitDetailTables())
            {
                return;
            }

            foreach (var collectionProperty in rendererContext.GridItemCollectionProperties)
            {
                if (permissionContext.HasCurrentUserReadPermission(collectionProperty.Name))
                {
                    var dataAdapter = _tableDataAdapterProvider.CreateCollectionTableDataAdapter(rendererContext.ActualItem, collectionProperty);
                    RenderTab(rendererContext, masterTableDataSet, selectedDataAdapter, dataAdapter);
                }
            }
        }
Esempio n. 3
0
        public void Visit(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is CollectionTableDataAdapter <TItem> collectionTableDataAdapter)
            {
                var selectedItemType      = _masterDetailRowArguments.SelectedItem.GetType();
                var detailAdapterItemType = _masterDetailRowArguments.DataAdapter.UnderlyingTypeOfItem;

                var constantValue = _propertyValueAccessorCache
                                    .GetPropertyAccesor(selectedItemType)
                                    .GetValue(_masterDetailRowArguments.SelectedItem, _masterDetailRelationship.MasterDetailConnection.MasterPropertyName);

                var parameter = Expression.Parameter(detailAdapterItemType, "x");
                var member    = Expression.Property(parameter, _masterDetailRelationship.MasterDetailConnection.ForeignPropertyName);

                //If the type of the member expression is a nullable,
                //the call to Expression.Equal will fail
                Expression constant;
                if (member.Type.IsGenericType && member.Type.GetGenericTypeDefinition() == typeof(Nullable <>))
                {
                    constant = Expression.Constant(constantValue, member.Type);
                }
                else
                {
                    constant = Expression.Constant(constantValue);
                }

                var body = Expression.Equal(member, constant);

                collectionTableDataAdapter.Filter = Expression.Lambda <Func <TItem, bool> >(body, parameter);
            }
        }
Esempio n. 4
0
        public ITableDataAdapter ConvertToDetailTableDataAdapter(ITableDataAdapter tableDataAdapter, object selectedItem)
        {
            var detailAdapterType = typeof(DetailTableDataAdapter <>).MakeGenericType(tableDataAdapter.UnderlyingTypeOfItem);

            return(Activator.CreateInstance(detailAdapterType,
                                            new object[] { gridConfigurationProvider, detailDataAdapterVisitors, new MasterDetailRowArguments(tableDataAdapter, selectedItem) }) as ITableDataAdapter);
        }
Esempio n. 5
0
        public void AddDetailGridViewComponent(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is null)
            {
                return;
            }

            var masterDetailRelationship = GridConfiguration.FindRelationshipConfiguration(tableDataAdapter.UnderlyingTypeOfItem);
            var pageSize = RuntimeHelpers.TypeCheck(masterDetailRelationship.DetailGridViewPageSize(TableDataSet));

            renderTreeBuilder.OpenComponent(++sequence, typeof(GridViewGeneric <>).MakeGenericType(tableDataAdapter.UnderlyingTypeOfItem));
            renderTreeBuilder.AddAttribute(++sequence, "DataAdapter", RuntimeHelpers.TypeCheck(tableDataAdapter));
            renderTreeBuilder.AddAttribute(++sequence, nameof(ITableDataSet.PageableOptions.PageSize), pageSize);

            var lazyLoadingUrl = masterDetailRelationship.DetailGridLazyLoadingUrl();

            if (!string.IsNullOrEmpty(lazyLoadingUrl))
            {
                renderTreeBuilder.AddAttribute(++sequence, nameof(ILazyTableDataSet.LazyLoadingOptions), new LazyLoadingOptions {
                    DataUri = lazyLoadingUrl
                });
            }

            renderTreeBuilder.CloseComponent();
        }
 public void AddGridViewComponent(ITableDataAdapter tableDataAdapter)
 {
     renderTreeBuilder.OpenComponent <GridView>(++sequence);
     renderTreeBuilder.AddAttribute(++sequence, "DataAdapter", RuntimeHelpers.TypeCheck(tableDataAdapter));
     renderTreeBuilder.AddAttribute(++sequence, "PageSize", RuntimeHelpers.TypeCheck(5));
     renderTreeBuilder.CloseComponent();
 }
        private void RenderTab(
            GridRendererContext rendererContext,
            IMasterTableDataSet masterTableDataSet,
            ITableDataAdapter selectedDataAdapter,
            ITableDataAdapter dataAdapter)
        {
            var masterDetailRelationship = rendererContext
                                           .GridConfiguration
                                           .FindRelationshipConfiguration(dataAdapter.UnderlyingTypeOfItem);

            var localActualItem = rendererContext.ActualItem;

            rendererContext.OpenElement(HtmlTagNames.Button,
                                        selectedDataAdapter.IsForSameUnderlyingType(dataAdapter) ? "tabs-button tabs-button-active" : "tabs-button");

            rendererContext.AddOnClickEvent(() =>
                                            BindMethods.GetEventHandlerValue((UIMouseEventArgs e) =>
                                                                             masterTableDataSet.SelectDataAdapter(new MasterDetailRowArguments(dataAdapter, localActualItem)))
                                            );

            rendererContext.OpenElement(HtmlTagNames.Span, "tabs-button-text");
            rendererContext.AddContent(masterDetailRelationship.DetailGridViewPageCaption(dataAdapter));
            rendererContext.CloseElement();
            rendererContext.CloseElement();
        }
Esempio n. 8
0
        public static bool IsForSameUnderlyingType(this ITableDataAdapter tableDataAdapter, ITableDataAdapter otherTableDataAdapter)
        {
            var tableDataAdapterType      = tableDataAdapter.UnderlyingTypeOfItem;
            var otherTableDataAdapterType = otherTableDataAdapter.UnderlyingTypeOfItem;

            return(tableDataAdapterType.FullName == otherTableDataAdapterType.FullName);
        }
        public void AddDetailGridViewComponent(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is null)
            {
                return;
            }

            var masterDetailRelationship = GridConfiguration.FindRelationshipConfiguration(tableDataAdapter.UnderlyingTypeOfItem);
            var pageSize = RuntimeHelpers.TypeCheck(masterDetailRelationship.DetailGridViewPageSize(TableDataSet));

            RendererTreeBuilder.OpenComponent(typeof(GridViewGeneric <>).MakeGenericType(tableDataAdapter.UnderlyingTypeOfItem));
            RendererTreeBuilder.AddAttribute("DataAdapter", RuntimeHelpers.TypeCheck(tableDataAdapter));
            RendererTreeBuilder.AddAttribute(nameof(ITableDataSet.PageableOptions.PageSize), pageSize);

            RendererTreeBuilder.AddAttribute(
                nameof(ILazyTableDataSet.LazyLoadingOptions),
                new LazyLoadingOptions
            {
                DataUri    = masterDetailRelationship.DetailGridLazyLoadingUrl(),
                PutDataUri = masterDetailRelationship.DetailGridUpdateUrl(),
                DeleteUri  = masterDetailRelationship.DetailGridDeleteUrl()
            });

            AddEventAttributes();
            RendererTreeBuilder.CloseComponent();
        }
Esempio n. 10
0
        private void RenderTab(
            GridRendererContext rendererContext,
            IMasterTableDataSet masterTableDataSet,
            ITableDataAdapter selectedDataAdapter,
            ITableDataAdapter dataAdapter)
        {
            var masterDetailRelationship = rendererContext
                                           .GridConfiguration
                                           .FindRelationshipConfiguration(dataAdapter.UnderlyingTypeOfItem);

            var localActualItem = rendererContext.ActualItem;

            rendererContext.OpenElement(HtmlTagNames.Button,
                                        selectedDataAdapter.IsForSameUnderlyingType(dataAdapter) ? "tabs-button tabs-button-active" : "tabs-button");

            rendererContext.AddOnClickEvent(
                EventCallback.Factory.Create(this, (MouseEventArgs e) =>
            {
                masterTableDataSet.SelectDataAdapter(new MasterDetailRowArguments(dataAdapter, localActualItem));
                rendererContext.RequestRerenderNotification?.Invoke();
            })
                );

            rendererContext.OpenElement(HtmlTagNames.Span, "tabs-button-text");
            rendererContext.AddContent(masterDetailRelationship.DetailGridViewPageCaption(dataAdapter));
            rendererContext.CloseElement();
            rendererContext.CloseElement();
        }
Esempio n. 11
0
 public void Visit(ITableDataAdapter tableDataAdapter)
 {
     if (tableDataAdapter is CollectionTableDataAdapter <TItem> collectionTableDataAdapter)
     {
         collectionTableDataAdapter.Filter = filter;
     }
 }
        public void AttachDetailDataSetAdapter(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapters.Contains(tableDataAdapter))
            {
                return;
            }

            tableDataAdapters.Add(tableDataAdapter);
        }
Esempio n. 13
0
        public void AddDetailTableSet(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is null)
            {
                throw new ArgumentNullException(nameof(tableDataAdapter));
            }

            detailTableDataAdapters.Add(tableDataAdapter);
        }
Esempio n. 14
0
        public static string DefaultTitle(this ITableDataAdapter tableDataAdapter)
        {
            var name      = tableDataAdapter.UnderlyingTypeOfItem.Name;
            var nameChars = name.ToCharArray();

            nameChars[0] = char.ToUpper(nameChars[0]);

            return(new string(nameChars));
        }
Esempio n. 15
0
 internal MasterTableDataAdapter(
     IGridConfigurationProvider gridConfigurationProvider,
     ITableDataAdapterProvider tableDataAdapterProvider,
     ITableDataAdapter mainTableDataAdapter)
 {
     this.mainTableDataAdapter      = mainTableDataAdapter ?? throw new ArgumentNullException(nameof(mainTableDataAdapter));
     this.gridConfigurationProvider = gridConfigurationProvider ?? throw new ArgumentNullException(nameof(gridConfigurationProvider));
     this.tableDataAdapterProvider  = tableDataAdapterProvider ?? throw new ArgumentNullException(nameof(tableDataAdapterProvider));
     this.detailTableDataAdapters   = new List <ITableDataAdapter>();
 }
        public MasterTableDataAdapter(ITableDataAdapter mainTableDataAdapter)
        {
            this.mainTableDataAdapter = mainTableDataAdapter ?? throw new ArgumentNullException(nameof(mainTableDataAdapter));
            if (mainTableDataAdapter.GetType() == typeof(MasterDetailDataSet <>))
            {
                throw new InvalidOperationException($"The type of {nameof(mainTableDataAdapter)} cannot be {mainTableDataAdapter.GetType()}." +
                                                    $"{nameof(ITableDataAdapter)} must provide collection of items e.g {nameof(CollectionTableDataAdapter<TItem>)}");
            }

            this.detailTableDataAdapters = new List <ITableDataAdapter>();
        }
Esempio n. 17
0
        public void AddGridViewComponent(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is null)
            {
                return;
            }

            renderTreeBuilder.OpenComponent(++sequence, typeof(GridViewGeneric <>).MakeGenericType(tableDataAdapter.UnderlyingTypeOfItem));
            renderTreeBuilder.AddAttribute(++sequence, "DataAdapter", RuntimeHelpers.TypeCheck(tableDataAdapter));
            renderTreeBuilder.AddAttribute(++sequence, nameof(ITableDataSet.PageableOptions.PageSize), RuntimeHelpers.TypeCheck(TableDataSet.PageableOptions.PageSize));
            renderTreeBuilder.CloseComponent();
        }
        public void Visit(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is ILazyLoadedTableDataAdapter lazyLoadedTableDataAdapter)
            {
                var selectedItemType = _masterDetailRowArguments.SelectedItem.GetType();

                var constantValue = _propertyValueAccessorCache
                                    .GetPropertyAccesor(selectedItemType)
                                    .GetValue(_masterDetailRowArguments.SelectedItem, _masterDetailRelationship.MasterDetailConnection.MasterPropertyName);

                lazyLoadedTableDataAdapter.AddRequestParamsAction = reqParams => reqParams
                                                                    .Add(_masterDetailRelationship.MasterDetailConnection.ForeignPropertyName, constantValue.ToString());
            }
        }
Esempio n. 19
0
        public void Visit(ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter is CollectionTableDataAdapter <TItem> collectionTableDataAdapter)
            {
                var selectedItemType      = masterDetailRowArguments.SelectedItem.GetType();
                var detailAdapterItemType = masterDetailRowArguments.DataAdapter.UnderlyingTypeOfItem;

                var constantValue = propertyValueAccessorCache
                                    .GetPropertyAccesor(selectedItemType)
                                    .GetValue(masterDetailRowArguments.SelectedItem, masterDetailRelationship.MasterDetailConnection.MasterPropertyName);

                var parameter = Expression.Parameter(detailAdapterItemType, "x");
                var member    = Expression.Property(parameter, masterDetailRelationship.MasterDetailConnection.ForeignPropertyName);
                var constant  = Expression.Constant(constantValue);
                var body      = Expression.Equal(member, constant);

                collectionTableDataAdapter.Filter = Expression.Lambda <Func <TItem, bool> >(body, parameter);;
            }
        }
        public ITableDataAdapter CreateMasterTableDataAdapter(ITableDataAdapter mainTableDataAdapter, IMasterTableFeature masterTableFeature)
        {
            if (masterTableFeature == default(IMasterTableFeature))
            {
                return(mainTableDataAdapter);
            }

            if (masterTableFeature.TableDataAdapter is IMasterTableDataAdapter masterTableDataAdapter)
            {
                var masterDataAdapterType = typeof(MasterTableDataAdapter <>).MakeGenericType(mainTableDataAdapter.UnderlyingTypeOfItem);
                var masterDataAdapter     = Activator.CreateInstance(masterDataAdapterType,
                                                                     new object[] { mainTableDataAdapter, _gridConfigurationProvider, this }) as IMasterTableDataAdapter;

                foreach (var detailAdapter in masterTableDataAdapter.DetailTableDataAdapters)
                {
                    masterDataAdapter.AddDetailTableSet(detailAdapter);
                }

                return(masterDataAdapter as ITableDataAdapter);
            }

            return(mainTableDataAdapter);
        }
Esempio n. 21
0
        public static string DetailGridViewPageCaption(this IMasterDetailRelationship masterDetailRelationship, ITableDataAdapter tableDataAdapter)
        {
            if (tableDataAdapter == null)
            {
                throw new ArgumentNullException(nameof(tableDataAdapter));
            }

            var tabCaptionAnnotationValue = masterDetailRelationship[GridViewAnnotationNames.DetailTabPageCaption];

            if (tabCaptionAnnotationValue is NullAnotationValue)
            {
                return(tableDataAdapter.DefaultTitle());
            }

            return(tabCaptionAnnotationValue.ToString());
        }
Esempio n. 22
0
 public MasterTableFeature(ITableDataAdapter tableDataAdapter)
 {
     TableDataAdapter = tableDataAdapter ?? throw new ArgumentException(nameof(tableDataAdapter));
 }
Esempio n. 23
0
        public MasterTableDataAdapterBuilder <TItem> WithDetailTableDataAdapter(ITableDataAdapter tableDataAdapter)
        {
            masterTableDataAdapter.AddDetailTableSet(tableDataAdapter);

            return(this);
        }
Esempio n. 24
0
 public MasterDetailRowArguments(ITableDataAdapter dataAdapter, object selectedItem)
 {
     DataAdapter  = dataAdapter ?? throw new ArgumentNullException(nameof(dataAdapter));
     SelectedItem = selectedItem ?? throw new ArgumentNullException(nameof(selectedItem));
 }
 public void AddDetailTableSet(ITableDataAdapter tableDataAdapter)
 => detailTableDataAdapters.Add(tableDataAdapter);
Esempio n. 26
0
        private void RenderTabs(GridRendererContext rendererContext, IMasterTableDataSet masterTableDataSet, ITableDataAdapter selectedDataAdapter)
        {
            foreach (var dataAdapter in masterTableDataSet.DetailDataAdapters)
            {
                RenderTab(rendererContext, masterTableDataSet, selectedDataAdapter, dataAdapter);
            }

            foreach (var collectionProperty in rendererContext.GridItemCollectionProperties)
            {
                var dataAdapter = tableDataAdapterProvider.CreateCollectionTableDataAdapter(rendererContext.ActualItem, collectionProperty);
                RenderTab(rendererContext, masterTableDataSet, selectedDataAdapter, dataAdapter);
            }
        }