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
相关产品推荐
相关产品推荐

