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(); }
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); } } }
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); } }
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); }
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(); }
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(); }
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(); }
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); }
public void AddDetailTableSet(ITableDataAdapter tableDataAdapter) { if (tableDataAdapter is null) { throw new ArgumentNullException(nameof(tableDataAdapter)); } detailTableDataAdapters.Add(tableDataAdapter); }
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)); }
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>(); }
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()); } }
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); }
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()); }
public MasterTableFeature(ITableDataAdapter tableDataAdapter) { TableDataAdapter = tableDataAdapter ?? throw new ArgumentException(nameof(tableDataAdapter)); }
public MasterTableDataAdapterBuilder <TItem> WithDetailTableDataAdapter(ITableDataAdapter tableDataAdapter) { masterTableDataAdapter.AddDetailTableSet(tableDataAdapter); return(this); }
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);
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); } }