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

如何在Blazor中手动重载Radzen DataGrid?点击按钮无响应

Blazor中Radzen DataGrid点击刷新按钮无响应的解决方案

问题排查与修复步骤

1. 错误初始化DataGrid引用

你手动实例化了RadzenDataGrid<class> grid = new RadzenDataGrid<class>();,这会导致grid指向的不是页面上实际渲染的DataGrid组件实例,调用grid.Reload()自然不会生效。

修正:
仅声明引用,让Blazor自动绑定组件实例:

RadzenDataGrid<class> grid; // 无需手动new,组件渲染时会自动赋值

2. 同步服务方法未适配异步逻辑

GetAllRecords是同步方法,但在异步的Refresh方法中直接调用,可能阻塞UI线程,同时不符合Blazor的异步最佳实践。

修正:
将服务层方法改为异步版本:

public async Task<List<class>> GetAllRecordsAsync() 
{
    return await _db.records.Include(r => r.a).Include(r => r.b)
                            .OrderByDescending(r => r.id)
                            .ToListAsync();
}

3. 刷新方法逻辑优化

原Refresh方法的执行顺序和冗余调用需要调整,确保数据更新后再触发网格重载:

修正后的Refresh方法:

async Task Refresh() 
{ 
    records = await Service.GetAllRecordsAsync();
    // 先确认grid引用有效,再调用重载
    if (grid != null)
    {
        await grid.Reload();
    }
    // RadzenDataGrid在Data绑定更新后通常会自动重绘,StateHasChanged一般无需手动调用
}

4. 检查DataGrid配置

确保DataGrid的Data="@records"绑定无误,没有设置AutoReload="false"这类会阻止自动刷新的属性。

完整修正后代码示例

Blazor组件代码:

<RadzenButton Click=@Refresh Icon="refresh" ButtonStyle="ButtonStyle.Light" />

<RadzenDataGrid @ref="grid" Data="@records" TItem="class" ...>
    <!-- 列定义等组件内容 -->
</RadzenDataGrid>

@code {
    IEnumerable<class> records;
    RadzenDataGrid<class> grid;

    async Task Refresh() 
    { 
        records = await Service.GetAllRecordsAsync();
        if (grid != null)
        {
            await grid.Reload();
        }
    } 
}

服务层代码:

public async Task<List<class>> GetAllRecordsAsync() 
{
    return await _db.records.Include(r => r.a).Include(r => r.b)
                            .OrderByDescending(r => r.id)
                            .ToListAsync();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:15:36