private void RenderGroupingFooterPart(GridRendererContext rendererContext) { rendererContext.OpenElement(HtmlTagNames.Div, rendererContext.CssClasses.FooterCssClasses.GroupingPartWrapper); rendererContext.OpenElement(HtmlTagNames.Select); rendererContext.AddAttribute(HtmlAttributes.Id, groupingSelectId); rendererContext.AddOnChangeEvent(() => BindMethods.GetEventHandlerValue(async(UIChangeEventArgs e) => { string propertyName = e.Value.ToString(); if (propertyName == noGroupingOptionText) { rendererContext.TableDataSet.GroupingOptions.DeactivateGrouping(); } else { rendererContext.TableDataSet.GroupingOptions.SetGroupedProperty(propertyName); } await rendererContext.TableDataSet.GoToPage(0); rendererContext.RequestRerenderNotification?.Invoke(); }) ); if (!rendererContext.TableDataSet.GroupingOptions.IsGroupingActive) { rendererContext.OpenElement(HtmlTagNames.Option); rendererContext.AddAttribute(HtmlAttributes.Disabled, true); rendererContext.AddContent(groupByPlaceholder); rendererContext.CloseElement(); } else { rendererContext.OpenElement(HtmlTagNames.Option); rendererContext.AddAttribute(HtmlAttributes.Value, string.Empty); rendererContext.AddContent(noGroupingOptionText); rendererContext.CloseElement(); } foreach (var groupableProperty in rendererContext.TableDataSet.GroupingOptions.GroupableProperties) { rendererContext.OpenElement(HtmlTagNames.Option); if (groupableProperty == rendererContext.TableDataSet.GroupingOptions.GroupedProperty) { rendererContext.AddAttribute(HtmlAttributes.Selected, true); } rendererContext.AddAttribute(HtmlAttributes.Value, groupableProperty.Name); rendererContext.ActualColumnName = groupableProperty.Name; var displayedGroupablePropertyName = rendererContext.ActualColumnConfiguration?.Caption ?? groupableProperty.Name; rendererContext.AddContent(displayedGroupablePropertyName); rendererContext.CloseElement(); } rendererContext.CloseElement(); rendererContext.CloseElement(); }
private void RenderGroupingFooterPart(GridRendererContext rendererContext) { rendererContext.OpenElement(HtmlTagNames.Div, rendererContext.CssClasses.FooterCssClasses.GroupingPartWrapper); rendererContext.OpenElement(HtmlTagNames.Select, "group-select"); rendererContext.AddAttribute(HtmlAttributes.Id, GroupingSelectId); rendererContext.AddAttribute(HtmlJsEvents.OnChange, EventCallback.Factory.Create(this, async(ChangeEventArgs e) => { rendererContext.TableDataSet.GroupingOptions.SetGroupedProperty(BindConverterExtensions.ConvertTo(e.Value, string.Empty)); await rendererContext.TableDataSet.GoToPage(0); rendererContext.RequestRerenderNotification?.Invoke(); }) ); if (!rendererContext.TableDataSet.GroupingOptions.IsGroupingActive) { rendererContext.OpenElement(HtmlTagNames.Option); rendererContext.AddAttribute(HtmlAttributes.Disabled, true); rendererContext.AddContent(GroupByPlaceholder); rendererContext.CloseElement(); } foreach (var groupableProperty in rendererContext.TableDataSet.GroupingOptions.GroupableProperties) { rendererContext.OpenElement(HtmlTagNames.Option); if (groupableProperty == rendererContext.TableDataSet.GroupingOptions.GroupedProperty) { rendererContext.AddAttribute(HtmlAttributes.Selected, true); } rendererContext.AddAttribute(HtmlAttributes.Value, groupableProperty.Name); rendererContext.AddContent(rendererContext.GetColumnCaption(groupableProperty.Name) ?? groupableProperty.Name); rendererContext.CloseElement(); } rendererContext.CloseElement(); rendererContext.CloseElement(); if (rendererContext.TableDataSet.GroupingOptions.IsGroupingActive) { rendererContext.OpenElement(HtmlTagNames.Button, "action-button"); rendererContext.AddOnClickEvent( EventCallback.Factory.Create(this, (MouseEventArgs e) => { rendererContext.TableDataSet.GroupingOptions.DeactivateGrouping(); rendererContext.RequestRerenderNotification?.Invoke(); }) ); rendererContext.OpenElement(HtmlTagNames.Span, "action-button-span"); rendererContext.OpenElement(HtmlTagNames.I, "fas fa-times"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); } }
private void RenderGroupingFooterPart(GridRendererContext rendererContext) { rendererContext.OpenElement(HtmlTagNames.Div, rendererContext.CssClasses.FooterCssClasses.GroupingPartWrapper); rendererContext.OpenElement(HtmlTagNames.Select, "group-select"); rendererContext.AddAttribute(HtmlAttributes.Id, GroupingSelectId); rendererContext.AddOnChangeEvent(() => BindMethods.GetEventHandlerValue(async(UIChangeEventArgs e) => { rendererContext.TableDataSet.GroupingOptions.SetGroupedProperty(e.Value.ToString()); await rendererContext.TableDataSet.GoToPage(0); rendererContext.RequestRerenderNotification?.Invoke(); }) ); if (!rendererContext.TableDataSet.GroupingOptions.IsGroupingActive) { rendererContext.OpenElement(HtmlTagNames.Option); rendererContext.AddAttribute(HtmlAttributes.Disabled, true); rendererContext.AddContent(GroupByPlaceholder); rendererContext.CloseElement(); } foreach (var groupableProperty in rendererContext.TableDataSet.GroupingOptions.GroupableProperties) { rendererContext.OpenElement(HtmlTagNames.Option); if (groupableProperty == rendererContext.TableDataSet.GroupingOptions.GroupedProperty) { rendererContext.AddAttribute(HtmlAttributes.Selected, true); } rendererContext.AddAttribute(HtmlAttributes.Value, groupableProperty.Name); rendererContext.AddContent(rendererContext.GetColumnCaption(groupableProperty.Name) ?? groupableProperty.Name); rendererContext.CloseElement(); } rendererContext.CloseElement(); rendererContext.CloseElement(); if (rendererContext.TableDataSet.GroupingOptions.IsGroupingActive) { rendererContext.OpenElement(HtmlTagNames.Button, "action-button"); rendererContext.AddOnClickEvent(() => BindMethods.GetEventHandlerValue((UIMouseEventArgs e) => { rendererContext.TableDataSet.GroupingOptions.DeactivateGrouping(); rendererContext.RequestRerenderNotification?.Invoke(); }) ); rendererContext.OpenElement(HtmlTagNames.Span, "action-button-span"); rendererContext.OpenElement(HtmlTagNames.I, "fas fa-times"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); } }
private void RenderColumnHeader(GridRendererContext rendererContext, PropertyInfo property) { var columnConfiguration = rendererContext.ActualColumnConfiguration; rendererContext.OpenElement(HtmlTagNames.TableHeadCell, rendererContext.CssClasses.TableHeaderCell, GetColumnStyle(columnConfiguration)); rendererContext.OpenElement(HtmlTagNames.Div); rendererContext.AddAttribute(HtmlAttributes.Style, "position: relative;"); if (columnConfiguration == null) { rendererContext.AddContent(GetColumnCaption(columnConfiguration, property)); rendererContext.CloseElement(); rendererContext.CloseElement(); return; } if (columnConfiguration.IsSortable) { RenderSortableColumnHeader(rendererContext, property, columnConfiguration); } else { rendererContext.AddContent(GetColumnCaption(columnConfiguration, property)); } if (columnConfiguration.IsFilterable) { rendererContext.AddFilterComponent(property); } rendererContext.CloseElement(); rendererContext.CloseElement(); }
protected override void BuildRenderTreeInternal(GridRendererContext rendererContext, PermissionContext permissionContext) { using (new MeasurableScope(sw => logger.LogInformation($"Grid grouped body rendering duration {sw.ElapsedMilliseconds}ms"))) { rendererContext.OpenElement(HtmlTagNames.TableBody, rendererContext.CssClasses.TableBody); foreach (var group in rendererContext.TableDataSet.GroupedItems) { try { rendererContext.OpenElement(HtmlTagNames.TableRow, rendererContext.CssClasses.TableGroupRow); rendererContext.OpenElement(HtmlTagNames.TableColumn, rendererContext.CssClasses.TableGroupRowCell); rendererContext.AddAttribute(HtmlAttributes.Colspan, rendererContext.NumberOfColumns); rendererContext.OpenElement(HtmlTagNames.Button, "pagination-button"); rendererContext.AddOnClickEvent( EventCallback.Factory.Create(this, (MouseEventArgs e) => { rendererContext.TableDataSet.ToggleGroupRow(group.Key); rendererContext.RequestRerenderNotification?.Invoke(); }) ); rendererContext.OpenElement(HtmlTagNames.Span, "pagination-button-arrow"); rendererContext.OpenElement(HtmlTagNames.I, !group.IsCollapsed ? "fas fa-angle-down" : "fas fa-angle-right"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.AddMarkupContent($"\t<b>{rendererContext.TableDataSet.GroupingOptions.GroupedProperty.Name}:</b> {group.Key.ToString()}\t"); rendererContext.OpenElement(HtmlTagNames.I); rendererContext.AddContent($"({group.Count})"); rendererContext.CloseElement(); if (!group.IsCollapsed) { var dataAdapter = tableDataAdapterProvider.CreateCollectionTableDataAdapter(rendererContext.TableDataSet.UnderlyingTypeOfItem(), group); var masterTableFeature = rendererContext.FlexGridContext.Features.Get <IMasterTableFeature>(); dataAdapter = tableDataAdapterProvider.CreateMasterTableDataAdapter(dataAdapter, masterTableFeature); rendererContext.AddGridViewComponent(dataAdapter); } rendererContext.CloseElement(); rendererContext.CloseElement(); } catch (Exception ex) { logger.LogError($"Error occured during rendering grouped grid view body. Ex: {ex}"); throw ex; } } rendererContext.CloseElement(); } }
protected override void BuildRendererTreeInternal(GridRendererContext rendererContext, PermissionContext permissionContext) { if (rendererContext.TableDataSet.FilterIsApplied) { rendererContext.OpenElement(HtmlTagNames.TableRow); rendererContext.OpenElement(HtmlTagNames.TableColumn); rendererContext.AddAttribute(HtmlAttributes.Colspan, rendererContext.NumberOfColumns); rendererContext.OpenElement(HtmlTagNames.Div, "table-info-text"); rendererContext.OpenElement(HtmlTagNames.Span); rendererContext.OpenElement(HtmlTagNames.I, "fas fa-search"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.AddMarkupContent("\t No matching items found"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); return; } if (!rendererContext.FlexGridContext.FirstPageLoaded) { rendererContext.OpenElement(HtmlTagNames.Div, "table-info-text table-info-text-small"); rendererContext.AddContent("Loading..."); rendererContext.CloseElement(); } else { rendererContext.OpenElement(HtmlTagNames.TableRow); rendererContext.OpenElement(HtmlTagNames.TableColumn); rendererContext.AddAttribute(HtmlAttributes.Colspan, rendererContext.NumberOfColumns); rendererContext.OpenElement(HtmlTagNames.Div, "table-info-text"); rendererContext.AddEmptyItemsMessage(); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); } }
protected override void BuildRendererTreeInternal(GridRendererContext rendererContext, PermissionContext permissionContext) { if (!permissionContext.HasCreateItemPermission) { return; } rendererContext.OpenElement(HtmlTagNames.Div, "modal"); rendererContext.AddAttribute(HtmlAttributes.Id, CreateItemOptions.CreateItemModalName); rendererContext.AddAttribute("role", "dialog"); rendererContext.OpenElement(HtmlTagNames.Div, "modal-dialog modal-lg modal-dialog-centered"); rendererContext.OpenElement(HtmlTagNames.Div, "modal-content"); rendererContext.OpenElement(HtmlTagNames.Div, "modal-header"); rendererContext.OpenElement(HtmlTagNames.H4, "modal-title"); rendererContext.AddContent("Create Item"); rendererContext.CloseElement(); rendererContext.OpenElement(HtmlTagNames.Button, "close"); rendererContext.AddOnClickEvent(() => BindMethods.GetEventHandlerValue((UIMouseEventArgs e) => FlexGridInterop.HideModal(CreateItemOptions.CreateItemModalName))); rendererContext.AddAttribute(HtmlAttributes.Type, "button"); rendererContext.AddAttribute("data-dismiss", "modal"); rendererContext.AddAttribute("aria-label", "Close"); rendererContext.OpenElement(HtmlTagNames.Span); rendererContext.AddAttribute(HtmlAttributes.AriaHidden, "true"); rendererContext.AddContent("×"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.OpenElement(HtmlTagNames.Div, "modal-body"); rendererContext.AddCreateItemComponent(); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); }
protected override void BuildRenderTreeInternal(GridRendererContext rendererContext, PermissionContext permissionContext) { var actualGroupItem = (GroupItem)rendererContext.ActualItem; bool isCollapsed = actualGroupItem.IsCollapsed; rendererContext.OpenElement(HtmlTagNames.TableBody, isCollapsed? "table-group-row-wrapper-collapsed" : "table-group-row-wrapper"); try { rendererContext.OpenElement(HtmlTagNames.TableRow, rendererContext.CssClasses.TableGroupRow); rendererContext.OpenElement(HtmlTagNames.TableColumn, rendererContext.CssClasses.TableGroupRowCell); int numberOfColumns = rendererContext.GridItemProperties.Count; if (rendererContext.GridConfiguration.InlineEditOptions.InlineEditIsAllowed) { numberOfColumns++; } if (rendererContext.GridConfiguration.IsMasterTable) { numberOfColumns++; } rendererContext.AddAttribute(HtmlAttributes.Colspan, numberOfColumns); rendererContext.AddOnClickEvent(() => BindMethods.GetEventHandlerValue((UIMouseEventArgs e) => { rendererContext.TableDataSet.ToggleGroupRow(actualGroupItem.Key); rendererContext.RequestRerenderNotification?.Invoke(); }) ); rendererContext.OpenElement(HtmlTagNames.I, !isCollapsed ? "fas fa-angle-down" : "fas fa-angle-right"); rendererContext.CloseElement(); var keyProperty = rendererContext.ActualItem.GetType().GetProperty("Key"); var keyValue = keyProperty != null?keyProperty.GetValue(rendererContext.ActualItem) : null; var key = keyValue != null?keyValue.ToString() : "(null)"; if (string.IsNullOrEmpty(key)) { key = @""""; } rendererContext.AddContent($" {key} "); rendererContext.OpenElement(HtmlTagNames.I); rendererContext.AddContent($"({actualGroupItem.Count})"); rendererContext.CloseElement(); rendererContext.CloseElement(); rendererContext.CloseElement(); var subItems = (IEnumerable)(GroupItem)rendererContext.ActualItem; foreach (var item in subItems) { rendererContext.ActualItem = item; gridPartRenderers.ForEach(renderer => renderer.BuildRendererTree(rendererContext, permissionContext)); } } catch (Exception ex) { throw ex; } rendererContext.CloseElement(); }