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

RadzenDataGrid中RowExpand事件异常:绑定后无法展开详情

问题:RadzenDataGrid绑定RowExpand事件后详情视图无法展开

我尝试为RadzenDataGrid绑定RowExpand事件以获取行的展开/折叠状态,核心代码如下:

<RadzenDataGrid @ref="grid" RowExpand="RowExpanded" .../>
<Template>
...
</Template>
<Columns>
...
</Columns>
</RadzenDataGrid>

....

void RowExpanded(ItemType item)
{
//OpenRow = item.id;
}

调试确认事件可成功触发,但即使事件内无任何逻辑,也会导致数据表格的详情视图完全无法打开;移除RowExpand事件处理程序后,表格恢复正常功能。Radzen在线演示中该功能正常,但未发现自身代码与演示的差异。


简化复现代码

模型代码

public class Testmodel
{
    public int Id { get; set; }

    public string Name { get; set; }

    public Testmodel(int id, string name)
    {
        Id = id;
        Name = name;
    }
}

Blazor页面代码

@page "/Testseite"
<h3>Testpage</h3>

<RadzenDataGrid @ref="grid" AllowFiltering="true" AllowPaging="true" PageSize="3" AllowSorting="true" ExpandMode="DataGridExpandMode.Single" Data="@Datasets" TItem="Testmodel" RowExpand="RowExpand">
    <Template Context="ModelDetail">
        <RadzenStack>
            <RadzenText>Id: @ModelDetail.Id</RadzenText>
            <RadzenText>Name: @ModelDetail.Name</RadzenText>
        </RadzenStack>
    </Template>
    <Columns>
        <RadzenDataGridColumn TItem="Testmodel" Property="Id" Title="Id" Filterable="true" />
        <RadzenDataGridColumn TItem="Testmodel" Property="Name" Title="Name" Filterable="true" />
    </Columns>
</RadzenDataGrid>

@if(SelectedId.HasValue)
{
    <RadzenText>SelectedId: @SelectedId.Value</RadzenText>
}

@code {
    RadzenDataGrid<Testmodel> grid;
    int? SelectedId = null;

    private List<Testmodel> Datasets
    {
        get
        {
            List<Testmodel> models = new List<Testmodel>();
            models.Add(new Testmodel(1, "ABC"));
            models.Add(new Testmodel(2, "DEF"));
            models.Add(new Testmodel(3, "XYZ"));
            return models;
        }
    }

    void RowExpand(Testmodel model)
    {
        SelectedId = model.Id;
    }
}

问题原因与修复方案

问题根源

问题出在**Datasets属性的实现方式**:你将其定义为每次访问都会返回全新List对象的getter。当RowExpand事件触发后,SelectedId更新会引发组件重渲染,此时DataGrid的数据源会被替换成新的集合。RadzenDataGrid会认为数据完全变更,重置所有行的展开状态;同时新集合中的对象与之前的引用不同,导致展开的行无法匹配,最终详情视图无法显示。

修复方案

将Datasets改为初始化一次的字段,避免每次重渲染都生成新集合:

@code {
    RadzenDataGrid<Testmodel> grid;
    int? SelectedId = null;

    // 改为字段,仅初始化一次
    private List<Testmodel> Datasets = new List<Testmodel>
    {
        new Testmodel(1, "ABC"),
        new Testmodel(2, "DEF"),
        new Testmodel(3, "XYZ")
    };

    void RowExpand(Testmodel model)
    {
        SelectedId = model.Id;
    }
}

如果需要动态生成数据,建议在组件初始化生命周期方法(如OnInitializedAsync)中生成一次,而非在getter中重复创建新集合。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:00:04