From cbcb37a3f3034ca5da5ff82356c7377241a6784e Mon Sep 17 00:00:00 2001 From: Nathan Hill Date: Tue, 10 Feb 2026 09:01:11 +1030 Subject: [PATCH] Fix grid filter in network latency conditions when using blazor server --- .../Components/Grid/GridColumnFilter.razor | 10 ++--- .../Components/Grid/GridColumnFilter.razor.cs | 40 +++++++++++++------ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/blazorbootstrap/Components/Grid/GridColumnFilter.razor b/blazorbootstrap/Components/Grid/GridColumnFilter.razor index 72e883b1b..fb1b474d6 100644 --- a/blazorbootstrap/Components/Grid/GridColumnFilter.razor +++ b/blazorbootstrap/Components/Grid/GridColumnFilter.razor @@ -38,19 +38,19 @@ || PropertyTypeName == StringConstants.PropertyTypeNameDecimal || PropertyTypeName == StringConstants.PropertyTypeNameDouble) { - + } else if (PropertyTypeName == StringConstants.PropertyTypeNameDateOnly) { - + } else if (PropertyTypeName == StringConstants.PropertyTypeNameDateTime) { - + } else if (PropertyTypeName == StringConstants.PropertyTypeNameBoolean) { - + } else if (PropertyTypeName == StringConstants.PropertyTypeNameEnum) { @@ -79,6 +79,6 @@ } else // guid or string { - + } diff --git a/blazorbootstrap/Components/Grid/GridColumnFilter.razor.cs b/blazorbootstrap/Components/Grid/GridColumnFilter.razor.cs index 769766487..dd1875125 100644 --- a/blazorbootstrap/Components/Grid/GridColumnFilter.razor.cs +++ b/blazorbootstrap/Components/Grid/GridColumnFilter.razor.cs @@ -8,7 +8,23 @@ public partial class GridColumnFilter : BlazorBootstrapComponentBase private IEnumerable? filterOperators; - private string? filterValue; + private string? _filterValue; + private string? filterValue + { + get => _filterValue; + set + { + if (_filterValue != value) + { + _filterValue = value; + // Trigger the filter changed event when the value changes + if (GridColumnFilterChanged.HasDelegate) + { + InvokeAsync(async () => await GridColumnFilterChanged.InvokeAsync(new FilterEventArgs(_filterValue!, filterOperator))); + } + } + } + } private string? selectedFilterSymbol; @@ -87,10 +103,15 @@ private async Task> GetFilterOperatorsAsync(stri private async Task OnEnumFilterValueChangedAsync(object enumValue) { + // Setting filterValue will automatically trigger the event via the property setter filterValue = enumValue?.ToString(); + } - if (GridColumnFilterChanged.HasDelegate) - await GridColumnFilterChanged.InvokeAsync(new FilterEventArgs(filterValue!, filterOperator)); + private void OnFilterValueInput(ChangeEventArgs args) + { + // Update the value directly without triggering the property setter to avoid issues with date/datetime binding + // The property setter will auto-trigger when assigned + filterValue = args?.Value?.ToString(); } private async Task OnFilterOperatorChangedAsync(FilterOperatorInfo filterOperatorInfo) @@ -107,21 +128,14 @@ private async Task OnFilterOperatorChangedAsync(FilterOperatorInfo filterOperato else { filterOperator = filterOperatorInfo.FilterOperator; + // Manually trigger the event since we're only changing the operator, not the value + if (GridColumnFilterChanged.HasDelegate) + await GridColumnFilterChanged.InvokeAsync(new FilterEventArgs(filterValue!, filterOperator)); } SetSelectedFilterSymbol(); - - if (GridColumnFilterChanged.HasDelegate) - await GridColumnFilterChanged.InvokeAsync(new FilterEventArgs(filterValue!, filterOperator)); } - private async Task OnFilterValueChangedAsync(ChangeEventArgs args) - { - filterValue = args?.Value?.ToString(); - - if (GridColumnFilterChanged.HasDelegate) - await GridColumnFilterChanged.InvokeAsync(new FilterEventArgs(filterValue!, filterOperator)); - } private void SetSelectedFilterSymbol() {