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

Blazor项目中Blazorise多选SelectList如何高亮历史选中值?

解决方案:Blazorise Datagrid多选SelectList编辑回显选中项

完全可行,问题核心是进入编辑模式时未正确初始化多选SelectList的选中值集合。以下是具体修复步骤:

1. 确保选中值集合的类型正确

selectedVisitShipment必须与SelectList的TValue匹配为集合类型,这里TValue=int,所以定义为:

private List<int> selectedVisitShipment = new();

2. 监听DataGrid编辑启动事件,初始化选中值

在DataGrid组件上添加OnRowEditingStarted事件,触发时从关联表中筛选当前Visit已选的Shipment ID,赋值给selectedVisitShipment:

<DataGrid ... OnRowEditingStarted="OnRowEditingStarted">
    <!-- 你的列定义 -->
</DataGrid>

对应的后台方法:

private void OnRowEditingStarted(Visit editedVisit)
{
    // 从allVisitShipments中筛选当前Visit关联的所有ShipmentId
    selectedVisitShipment = allVisitShipments
        .Where(v => v.VisitId == editedVisit.Id)
        .Select(v => v.ShipmentId)
        .ToList();
}

3. 修正SelectList绑定逻辑

保留原有EditTemplate代码,但要确保openShipments包含所有可选的Shipment选项(包括已选中的),同时@bind-SelectedValues绑定的集合在编辑开始时已被正确赋值。

关键注意点

  • 不要手动在其他时机更新selectedVisitShipment,通过DataGrid的编辑事件触发初始化,保证时机正确。
  • 确认allVisitShipments和allShipments的数据在编辑前已正确加载,无延迟或缺失情况。

修改后的完整列代码示例:

<DataGridSelectColumn Field="@nameof(Visit.VisitShipment)" Caption="Lieferung" Width="600px" Sortable Editable>
    <DisplayTemplate>
        @if (context != null)
        {
            <div>
                @foreach (var visitShipment in allVisitShipments.Where(v => v.VisitId == context.Id).ToList())
                {
                    var shipment = allShipments.FirstOrDefault(a => a.Id == visitShipment.ShipmentId);
                    if (shipment != null)
                    {
                        <div>@($"{shipment.OrderNo} - {shipment.ShipToName}")</div>
                    }
                }
            </div>
        }
    </DisplayTemplate>
    <EditTemplate>
        <SelectList Multiple
                TItem="Shipment"
                TValue="int"
                Data="@openShipments"
                TextField="@((item) => $"{item.OrderNo}, {item.ShipToName}")"
                ValueField="@((item) => item.Id)"
                @bind-SelectedValues="@selectedVisitShipment"                                
                DefaultItemText="Bitte Auftrag auswählen" />
    </EditTemplate>
</DataGridSelectColumn>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:05:00