From a97142e3d6978abfa9af601772ad952a8b8351ab Mon Sep 17 00:00:00 2001 From: Gustau Navarro Date: Wed, 6 Apr 2022 00:42:01 +0200 Subject: [PATCH] Add AfterChangeValue grid column event --- GridBlazor/Columns/GridColumnBase.cs | 8 + GridBlazor/GridBlazor.csproj | 2 +- GridBlazor/Pages/GridCreateComponent.razor.cs | 5 +- GridBlazor/Pages/GridUpdateComponent.razor.cs | 5 +- .../ColumnCollections/ColumnCollections.cs | 66 ++++++++ .../Pages/AfterChangeValue.razor | 71 +++++++++ .../Shared/NavMenu.razor | 5 + .../Pages/AfterChangeValue.razor | 142 ++++++++++++++++++ GridBlazorOData.Client/Shared/NavMenu.razor | 5 + .../ColumnCollections/ColumnCollections.cs | 67 +++++++++ .../Pages/AfterChangeValue.razor | 78 ++++++++++ GridBlazorServerSide/Shared/NavMenu.razor | 5 + .../ColumnCollections/ColumnCollections.cs | 67 +++++++++ .../Pages/AfterChangeValue.razor | 77 ++++++++++ GridBlazorStandalone/Shared/NavMenu.razor | 5 + GridCore/Columns/GridCoreColumnBase.cs | 8 + GridCore/GridCore.csproj | 2 +- GridMvc/GridMvc.csproj | 2 +- GridShared/Columns/IGridColumn.cs | 6 + GridShared/GridShared.csproj | 2 +- docs/blazor_client/Events.md | 29 ++++ docs/blazor_local/Events.md | 30 ++++ docs/blazor_odata/Events.md | 30 ++++ docs/blazor_server/Events.md | 30 ++++ docs/dotnetcore_blazor/Events.md | 30 ++++ 25 files changed, 771 insertions(+), 6 deletions(-) create mode 100644 GridBlazorClientSide.Client/Pages/AfterChangeValue.razor create mode 100644 GridBlazorOData.Client/Pages/AfterChangeValue.razor create mode 100644 GridBlazorServerSide/Pages/AfterChangeValue.razor create mode 100644 GridBlazorStandalone/Pages/AfterChangeValue.razor diff --git a/GridBlazor/Columns/GridColumnBase.cs b/GridBlazor/Columns/GridColumnBase.cs index 2165f2be..23ff7271 100644 --- a/GridBlazor/Columns/GridColumnBase.cs +++ b/GridBlazor/Columns/GridColumnBase.cs @@ -70,6 +70,8 @@ public abstract class GridColumnBase : GridStyledColumn, IGridColumn, IExp public Func CrudHidden { get; protected set; } = x => GridShared.Columns.CrudHidden.NONE; + public Func AfterChangeValue { get; set; } + public Func ReadOnlyOnCreate { get; protected set; } = x => false; public Func ReadOnlyOnUpdate { get; protected set; } = x => false; @@ -524,6 +526,12 @@ public IGridColumn SetCrudHidden(bool create, bool read, bool update, bool de return this; } + public IGridColumn SetAfterChangeValue(Func afterChangeValue) + { + AfterChangeValue = afterChangeValue; + return this; + } + public IGridColumn SetExcelHidden(bool? excelHidden) { ExcelHidden = excelHidden; diff --git a/GridBlazor/GridBlazor.csproj b/GridBlazor/GridBlazor.csproj index 70fee599..5b60403c 100644 --- a/GridBlazor/GridBlazor.csproj +++ b/GridBlazor/GridBlazor.csproj @@ -6,7 +6,7 @@ 8.0 True False - 3.2.4 + 3.2.5 GridBlazor Grid components for Blazor Grid components for Blazor diff --git a/GridBlazor/Pages/GridCreateComponent.razor.cs b/GridBlazor/Pages/GridCreateComponent.razor.cs index 26744cc5..a6a4bb0d 100644 --- a/GridBlazor/Pages/GridCreateComponent.razor.cs +++ b/GridBlazor/Pages/GridCreateComponent.razor.cs @@ -125,7 +125,7 @@ private void SetValue(object value, IGridColumn column) pi.SetValue(obj, value, null); } - private void ChangeValue(ChangeEventArgs e, IGridColumn column, string typeAttr = null) + private async Task ChangeValue(ChangeEventArgs e, IGridColumn column, string typeAttr = null) { if (string.IsNullOrWhiteSpace(e.Value.ToString())) { @@ -181,6 +181,9 @@ private void ChangeValue(ChangeEventArgs e, IGridColumn column, string typeAttr } } } + + if (((IGridColumn)column).AfterChangeValue != null) + await((IGridColumn)column).AfterChangeValue(Item, GridMode.Create); } private void OnFileChange(IGridColumn column, IFileListEntry[] files) diff --git a/GridBlazor/Pages/GridUpdateComponent.razor.cs b/GridBlazor/Pages/GridUpdateComponent.razor.cs index f6df4aeb..2b590daa 100644 --- a/GridBlazor/Pages/GridUpdateComponent.razor.cs +++ b/GridBlazor/Pages/GridUpdateComponent.razor.cs @@ -145,7 +145,7 @@ private void SetValue(object value, IGridColumn column) pi.SetValue(obj, value, null); } - private void ChangeValue(ChangeEventArgs e, IGridColumn column, string typeAttr = null) + private async Task ChangeValue(ChangeEventArgs e, IGridColumn column, string typeAttr = null) { if (string.IsNullOrWhiteSpace(e.Value.ToString())) { @@ -201,6 +201,9 @@ private void ChangeValue(ChangeEventArgs e, IGridColumn column, string typeAttr } } } + + if (((IGridColumn)column).AfterChangeValue != null) + await((IGridColumn)column).AfterChangeValue(Item, GridMode.Update); } private void OnFileChange(IGridColumn column, IFileListEntry[] files) diff --git a/GridBlazorClientSide.Client/ColumnCollections/ColumnCollections.cs b/GridBlazorClientSide.Client/ColumnCollections/ColumnCollections.cs index d73bad4c..1d7bffa8 100644 --- a/GridBlazorClientSide.Client/ColumnCollections/ColumnCollections.cs +++ b/GridBlazorClientSide.Client/ColumnCollections/ColumnCollections.cs @@ -572,6 +572,72 @@ public static Action, string, Func o.Customer.IsVip ? Strings.BoolTrueLabel : Strings.BoolFalseLabel).SetCrudHidden(true); }; + public static Action, Func, string> OrderColumnsWithCrudAfterChange + = (c, afterChangeCustomerID, path) => + { + /* Adding "OrderID" column: */ + c.Add(o => o.OrderID).SetPrimaryKey(true).Titled(SharedResource.Number).SetWidth(100); + + /* Adding "CustomerID" column: */ + c.Add(o => o.CustomerID, true).SetSelectField(true, o => o.Customer.CustomerID + " - " + o.Customer.CompanyName, o => path + $"api/SampleData/GetAllCustomers") + .SetAfterChangeValue(afterChangeCustomerID); + + /* Adding "EmployeeID" column: */ + c.Add(o => o.EmployeeID, true).SetSelectField(true, o => o.Employee.EmployeeID.ToString() + " - " + o.Employee.FirstName + " " + o.Employee.LastName, o => path + $"api/SampleData/GetAllEmployees"); + + /* Adding "ShipVia" column: */ + c.Add(o => o.ShipVia, true).SetSelectField(true, o => o.Shipper == null ? "" : o.Shipper.ShipperID.ToString() + " - " + o.Shipper.CompanyName, path + $"api/SampleData/GetAllShippers"); + + /* Adding "OrderDate" column: */ + c.Add(o => o.OrderDate, "OrderCustomDate").Titled(SharedResource.OrderCustomDate) + .Format("{0:yyyy-MM-dd}").SetWidth(120) + .SetCrudWidth(3); + + /* Adding "CompanyName" column: */ + c.Add(o => o.Customer.CompanyName).Titled(SharedResource.CompanyName) + .SetWidth(250).SetCrudHidden(true).SetReadOnlyOnUpdate(true); + + /* Adding "ContactName" column: */ + c.Add(o => o.Customer.ContactName).Titled(SharedResource.ContactName).SetCrudHidden(true); + + /* Adding "Freight" column: */ + c.Add(o => o.Freight) + .Titled(SharedResource.Freight) + .SetWidth(150) + .Format("{0:#,##0.00}"); + + /* Adding "Vip customer" column: */ + c.Add(o => o.Customer.IsVip).Titled(SharedResource.IsVip).SetWidth(90).Css("hidden-xs") //hide on phones + .RenderValueAs(o => o.Customer.IsVip ? Strings.BoolTrueLabel : Strings.BoolFalseLabel).SetCrudHidden(true); + + /* Adding hidden "RequiredDate" column: */ + c.Add(o => o.RequiredDate, true).Format("{0:yyyy-MM-dd}").SetCrudWidth(3); + + /* Adding hidden "ShippedDate" column: */ + c.Add(o => o.ShippedDate, true).Format("{0:yyyy-MM-dd}").SetCrudWidth(3); + + /* Adding hidden "ShipName" column: */ + c.Add(o => o.ShipName, true); + + /* Adding hidden "ShipAddress" column: */ + c.Add(o => o.ShipAddress, true); + + /* Adding hidden "ShipCity" column: */ + c.Add(o => o.ShipCity, true); + + /* Adding hidden "ShipPostalCode" column: */ + c.Add(o => o.ShipPostalCode, true); + + /* Adding hidden "ShipRegion" column: */ + c.Add(o => o.ShipRegion, true); + + /* Adding hidden "ShipCountry" column: */ + c.Add(o => o.ShipCountry, true); + + /* Adding not mapped column, that renders a component */ + c.Add(true).Titled("Images").RenderCrudComponentAs(); + }; + public static Action> OrderColumnsWithSubgrids = c => { /* Adding "OrderID" column: */ diff --git a/GridBlazorClientSide.Client/Pages/AfterChangeValue.razor b/GridBlazorClientSide.Client/Pages/AfterChangeValue.razor new file mode 100644 index 00000000..dac98380 --- /dev/null +++ b/GridBlazorClientSide.Client/Pages/AfterChangeValue.razor @@ -0,0 +1,71 @@ +@page "/afterchangevalue" +@using GridBlazorClientSide.Client.ColumnCollections +@using GridBlazorClientSide.Shared.Models +@using Microsoft.Extensions.Primitives +@using System.Globalization +@using System.Threading.Tasks +@inject NavigationManager NavigationManager +@inject HttpClient HttpClient +@inject ICrudDataService orderService + +

Grid Sample

+ +

+ This page contains a CRUD grid implementing an event to modify the OrderDate after the CustomerID is changed on the Create form +

+ +

+ This component demonstrates a GridBlazor client-side grid. For more information, please see: https://github.com/gustavnavar/Grid.Blazor +

+ +@if (_task.IsCompleted) +{ +
+
+ +
+
+} +else +{ +

Loading...

+} + +@code +{ + private CGrid _grid; + private Task _task; + + protected override async Task OnParametersSetAsync() + { + var locale = CultureInfo.CurrentCulture; + + var query = new QueryDictionary(); + string url = NavigationManager.BaseUri + "api/SampleData/OrderColumnsWithCrud"; + + Func afterChangeCustomerID = async (order, mode) => + { + if (mode == GridMode.Create) + { + order.OrderDate = DateTime.Now; + StateHasChanged(); + await Task.CompletedTask; + } + }; + + var client = new GridClient(HttpClient, url, query, false, "ordersGrid", c => + ColumnCollections.OrderColumnsWithCrudAfterChange(c, afterChangeCustomerID, NavigationManager.BaseUri), locale) + .Sortable() + .Filterable() + .SetStriped(true) + .Crud(true, orderService) + .WithMultipleFilters() + .WithGridItemsCount(); + + _grid = client.Grid; + + // Set new items to grid + _task = client.UpdateGrid(); + await _task; + } +} diff --git a/GridBlazorClientSide.Client/Shared/NavMenu.razor b/GridBlazorClientSide.Client/Shared/NavMenu.razor index 66c1c7a0..2ddd34e6 100644 --- a/GridBlazorClientSide.Client/Shared/NavMenu.razor +++ b/GridBlazorClientSide.Client/Shared/NavMenu.razor @@ -97,6 +97,11 @@ Header CRUD + + + +