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

Blazor Server:Radzen下拉框切换后重新计算ProjectWipCalculations的方法

解决方案

1. 调整下拉框绑定与事件配置

修改RadzenDropDown,让它直接绑定CalendarPeriod2对象(而非仅字符串),这样能直接获取选中项的PeriodFrom,同时添加选中变更事件触发数据重新计算:

<div class="rz-p-12 rz-text-align-center">
    <RadzenDropDown 
        TValue="CalendarPeriod2" 
        @bind-Value="@SelectedPeriod" 
        Data="@CalendarPeriod2" 
        TextProperty="GlPeriodOracle"
        Change="@OnPeriodChanged" />
</div>

2. 更新代码逻辑

在@code块中添加选中项变量,调整初始化逻辑,并实现变更事件处理:

@code {
    public IEnumerable<CalendarPeriod2> CalendarPeriod2 { get; set; } = null!;
    public CalendarPeriod2? SelectedPeriod { get; set; }
    // 假设ProjectWipCalculations是已定义的业务数据变量
    public YourWipDataType? ProjectWipCalculations { get; set; }

    protected override async Task OnParametersSetAsync()
    {
        CalendarPeriod2 = await _db.GetCalendarPeriod2Async();
        // 设置默认选中项为集合第一个元素
        SelectedPeriod = CalendarPeriod2.FirstOrDefault();
        if (SelectedPeriod != null)
        {
            // 初始化时用默认选中项的PeriodFrom计算数据
            ProjectWipCalculations = await _db.GetCurrentMonthWIPData(projectList, SelectedPeriod.PeriodFrom);
        }
    }

    // 下拉框选中变更时触发的方法
    private async Task OnPeriodChanged()
    {
        if (SelectedPeriod != null)
        {
            // 根据选中项的PeriodFrom重新计算数据
            ProjectWipCalculations = await _db.GetCurrentMonthWIPData(projectList, SelectedPeriod.PeriodFrom);
            // 手动触发组件重新渲染(Blazor通常会自动处理,显式调用更保险)
            await InvokeAsync(StateHasChanged);
        }
    }
}

关键修改说明

  • 绑定对象而非字符串:将TValue改为CalendarPeriod2,直接绑定整个对象,避免后续需要通过字符串查找对应实体的额外逻辑。
  • 默认选中项设置:初始化时将SelectedPeriod设为集合第一个元素,确保首次渲染有默认值并计算对应数据。
  • 变更事件处理:通过Change事件触发OnPeriodChanged方法,在方法内使用选中项的PeriodFrom重新调用数据接口,并手动触发组件渲染更新UI。

备选方案(若需保留字符串值绑定)

如果必须使用GlPeriodOracle作为下拉框的值类型,可按以下方式调整:

<RadzenDropDown 
    TValue="string" 
    @bind-Value="@SelectedGlPeriodOracle" 
    Data="@CalendarPeriod2.Select(p => p.GlPeriodOracle)"
    Change="@OnPeriodChanged" />
@code {
    public string? SelectedGlPeriodOracle { get; set; }

    protected override async Task OnParametersSetAsync()
    {
        CalendarPeriod2 = await _db.GetCalendarPeriod2Async();
        SelectedGlPeriodOracle = CalendarPeriod2.Select(p => p.GlPeriodOracle).FirstOrDefault();
        if (SelectedGlPeriodOracle != null)
        {
            var selectedPeriod = CalendarPeriod2.First(p => p.GlPeriodOracle == SelectedGlPeriodOracle);
            ProjectWipCalculations = await _db.GetCurrentMonthWIPData(projectList, selectedPeriod.PeriodFrom);
        }
    }

    private async Task OnPeriodChanged()
    {
        if (SelectedGlPeriodOracle != null)
        {
            var selectedPeriod = CalendarPeriod2.First(p => p.GlPeriodOracle == SelectedGlPeriodOracle);
            ProjectWipCalculations = await _db.GetCurrentMonthWIPData(projectList, selectedPeriod.PeriodFrom);
            await InvokeAsync(StateHasChanged);
        }
    }
}

这种方式需要通过选中的字符串去匹配对应的CalendarPeriod2对象,相比直接绑定对象多了一步查找操作,推荐优先使用第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:34:56