From 8a22217866425aaef843899a6d453eee87e14b83 Mon Sep 17 00:00:00 2001 From: OlgunR Date: Mon, 11 May 2026 13:57:01 +0200 Subject: [PATCH] Refactor BandGridBase methods to async for UI reliability Refactored several methods in BandGridBase to async Task and updated their invocations to use await. EventCallbacks for date filter changes now use async lambdas. Awaited InvokeAsync(StateHasChanged) to ensure UI updates after async operations. These changes improve UI state consistency and reliability in Blazor. --- .../Components/BandGridBase.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/DbFirst.BlazorWebApp/Components/BandGridBase.cs b/DbFirst.BlazorWebApp/Components/BandGridBase.cs index d8c4525..ef47bb6 100644 --- a/DbFirst.BlazorWebApp/Components/BandGridBase.cs +++ b/DbFirst.BlazorWebApp/Components/BandGridBase.cs @@ -132,13 +132,13 @@ public abstract class BandGridBase : ComponentBase UpdateBandOptions(); } - protected void RemoveBand(BandDefinition band) + protected async Task RemoveBand(BandDefinition band) { bandLayout.Bands.Remove(band); foreach (var key in columnBandAssignments.Where(p => p.Value == band.Id).Select(p => p.Key).ToList()) columnBandAssignments.Remove(key); UpdateBandOptions(); - SyncBandsFromAssignments(); + await SyncBandsFromAssignments(); } protected void UpdateBandCaption(BandDefinition band, string value) @@ -147,19 +147,19 @@ public abstract class BandGridBase : ComponentBase UpdateBandOptions(); } - protected void UpdateColumnBand(string fieldName, string? bandId) + protected async Task UpdateColumnBand(string fieldName, string? bandId) { if (string.IsNullOrWhiteSpace(bandId)) columnBandAssignments.Remove(fieldName); else columnBandAssignments[fieldName] = bandId; - SyncBandsFromAssignments(); + await SyncBandsFromAssignments(); } protected string GetColumnBand(string fieldName) => columnBandAssignments.TryGetValue(fieldName, out var bandId) ? bandId : string.Empty; - protected void SyncBandsFromAssignments() + protected async Task SyncBandsFromAssignments() { foreach (var band in bandLayout.Bands) { @@ -168,7 +168,7 @@ public abstract class BandGridBase : ComponentBase .Select(c => c.FieldName) .ToList(); } - _ = InvokeAsync(StateHasChanged); + await InvokeAsync(StateHasChanged); } protected void UpdateBandOptions() @@ -245,8 +245,8 @@ public abstract class BandGridBase : ComponentBase if (!_dateFilterTemplates.TryGetValue(fieldName, out var template)) { // EventCallbacks einmalig erstellen – stabile Referenzen über alle Renders - _fromCallbacks[fieldName] = EventCallback.Factory.Create(this, (DateTime? v) => OnFilterFromChanged(fieldName, v)); - _toCallbacks[fieldName] = EventCallback.Factory.Create(this, (DateTime? v) => OnFilterToChanged(fieldName, v)); + _fromCallbacks[fieldName] = EventCallback.Factory.Create(this, async (DateTime? v) => await OnFilterFromChanged(fieldName, v)); + _toCallbacks[fieldName] = EventCallback.Factory.Create(this, async (DateTime? v) => await OnFilterToChanged(fieldName, v)); template = BuildDateFilterTemplate(fieldName); _dateFilterTemplates[fieldName] = template; } @@ -330,19 +330,19 @@ public abstract class BandGridBase : ComponentBase else if (op.OperatorType == BinaryOperatorType.Less) to = dt.AddDays(-1); } - private void OnFilterFromChanged(string fieldName, DateTime? value) + private async Task OnFilterFromChanged(string fieldName, DateTime? value) { _filterFrom[fieldName] = value; - ApplyDateFilter(fieldName); + await ApplyDateFilter(fieldName); } - private void OnFilterToChanged(string fieldName, DateTime? value) + private async Task OnFilterToChanged(string fieldName, DateTime? value) { _filterTo[fieldName] = value; - ApplyDateFilter(fieldName); + await ApplyDateFilter(fieldName); } - private void ApplyDateFilter(string fieldName) + private async Task ApplyDateFilter(string fieldName) { var ops = new List(); if (_filterFrom.TryGetValue(fieldName, out var from) && from.HasValue) @@ -360,7 +360,7 @@ public abstract class BandGridBase : ComponentBase gridRef?.SetFieldFilterCriteria(fieldName, criteria); if (_filterContexts.TryGetValue(fieldName, out var ctx)) ctx.FilterCriteria = criteria; - _ = InvokeAsync(StateHasChanged); + await InvokeAsync(StateHasChanged); } protected void SetEditContext(EditContext context)