Refactor BandGridBase methods to async for UI reliability
Refactored several methods in BandGridBase<TItem> 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.
This commit is contained in:
@@ -132,13 +132,13 @@ public abstract class BandGridBase<TItem> : 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<TItem> : 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<TItem> : ComponentBase
|
||||
.Select(c => c.FieldName)
|
||||
.ToList();
|
||||
}
|
||||
_ = InvokeAsync(StateHasChanged);
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
protected void UpdateBandOptions()
|
||||
@@ -245,8 +245,8 @@ public abstract class BandGridBase<TItem> : ComponentBase
|
||||
if (!_dateFilterTemplates.TryGetValue(fieldName, out var template))
|
||||
{
|
||||
// EventCallbacks einmalig erstellen – stabile Referenzen über alle Renders
|
||||
_fromCallbacks[fieldName] = EventCallback.Factory.Create<DateTime?>(this, (DateTime? v) => OnFilterFromChanged(fieldName, v));
|
||||
_toCallbacks[fieldName] = EventCallback.Factory.Create<DateTime?>(this, (DateTime? v) => OnFilterToChanged(fieldName, v));
|
||||
_fromCallbacks[fieldName] = EventCallback.Factory.Create<DateTime?>(this, async (DateTime? v) => await OnFilterFromChanged(fieldName, v));
|
||||
_toCallbacks[fieldName] = EventCallback.Factory.Create<DateTime?>(this, async (DateTime? v) => await OnFilterToChanged(fieldName, v));
|
||||
template = BuildDateFilterTemplate(fieldName);
|
||||
_dateFilterTemplates[fieldName] = template;
|
||||
}
|
||||
@@ -330,19 +330,19 @@ public abstract class BandGridBase<TItem> : 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<CriteriaOperator>();
|
||||
if (_filterFrom.TryGetValue(fieldName, out var from) && from.HasValue)
|
||||
@@ -360,7 +360,7 @@ public abstract class BandGridBase<TItem> : 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)
|
||||
|
||||
Reference in New Issue
Block a user