You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7 Quick Grid筛选器刷新异常及过滤计数滞后问题

解决Blazor QuickGrid筛选计数UI滞后问题

问题根源

你之前在FilteredQuickProjects的getter中维护CurrentFilters,但这个getter会在网格分页、排序、数据渲染等多个场景被调用,UI渲染CurrentFilters.Count的时机和getter执行时机不匹配,导致显示滞后。而在getter中调用StateHasChanged()会触发组件重新渲染,渲染过程又会再次调用getter,形成无限循环。

修复方案

1. 拆分筛选逻辑与状态维护

把CurrentFilters的更新从数据筛选属性中剥离,放到筛选变量的setter中,确保筛选条件变化时立刻更新计数:

private string _filterProjectName;
public string filterProjectName
{
    get => _filterProjectName;
    set
    {
        if (_filterProjectName != value)
        {
            _filterProjectName = value;
            UpdateFilterCount();
            // 通知QuickGrid刷新数据
            MyWorkGrid?.RefreshDataAsync();
        }
    }
}

private void UpdateFilterCount()
{
    CurrentFilters.Clear();
    
    // 逐个检查筛选条件
    if (!string.IsNullOrWhiteSpace(filterProjectName))
        CurrentFilters.Add("ProjectName");
    // 其他筛选条件(如filterStatus、filterDate等)同理添加判断
}

2. 简化筛选属性逻辑

修改FilteredQuickProjects,只负责数据筛选,不再修改CurrentFilters:

public IQueryable<MyWorkViewModel> FilteredQuickProjects
{
    get
    {
        if (!PageIsLoaded)
            return MyQuickProjects;

        var result = MyQuickProjects.AsQueryable();

        if (!string.IsNullOrWhiteSpace(filterProjectName))
        {
            result = result.Where(x => x.Name.Contains(filterProjectName, StringComparison.InvariantCultureIgnoreCase));
        }
        // 其他筛选条件的Where语句
        
        return result;
    }
}

3. 实现清除筛选按钮

在UI中根据CurrentFilters.Count控制按钮显示,并添加清除逻辑:

<div class="d-flex align-items-center">
    <label class="ms-3">Filters: @CurrentFilters.Count</label>
    @if (CurrentFilters.Count > 0)
    {
        <button class="btn btn-sm btn-outline-secondary ms-2" @onclick="ClearAllFilters">清除所有筛选</button>
    }
</div>

<!-- 原QuickGrid代码保持不变 -->

对应的清除方法:

private void ClearAllFilters()
{
    // 清空所有筛选变量
    filterProjectName = string.Empty;
    // 其他筛选变量(如filterStatus等)设为默认值
    
    UpdateFilterCount();
    MyWorkGrid?.RefreshDataAsync();
}

原理说明

通过筛选变量的setter实时更新CurrentFilters,确保UI显示的计数和实际筛选状态完全同步。同时用MyWorkGrid.RefreshDataAsync()主动通知网格刷新数据,避免依赖属性getter的被动调用,彻底解决计数滞后和无限循环问题。

内容的提问来源于stack exchange,提问作者Grandizer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:45:34