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

如何实现SfGrid中ComboBox按选中类别过滤选项?

解决方案:根据选中类别筛选SfGrid中ComboBox的选项

要实现根据当前行选中的Category过滤ItemCode列ComboBox的选项,可通过动态筛选数据源和类别变更联动两步完成:

1. 实现动态筛选方法

在组件代码中添加按类别筛选商品列表的方法,用于返回当前类别对应的有效商品数据:

// 假设dtoItemMaster实体包含Category属性,与行数据的Category匹配
private IEnumerable<dtoItemMaster> GetFilteredItems(string currentCategory)
{
    if (string.IsNullOrWhiteSpace(currentCategory))
        return ItemMasterList;
    // 按当前行的Category过滤商品列表
    return ItemMasterList.Where(item => item.Category.Equals(currentCategory, StringComparison.OrdinalIgnoreCase));
}

2. 修改ItemCode列的ComboBox绑定

将ItemCode列EditTemplate中的ComboBox数据源,从直接绑定ItemMasterList改为调用上述筛选方法,传入当前行的Category:

<GridColumn Field=@nameof(dtoItemMasterClassWise.ItemCode) HeaderText="Item Code" ValidationRules="@(new ValidationRules{ Required=true})" Width="90">
    <EditTemplate>
        @{
            var rowData = context as dtoItemMasterClassWise;
            <SfComboBox ID="ItemCode" AllowCustom="true" @bind-Value="@rowData.ItemCode" 
                        TItem="dtoItemMaster" TValue="string" 
                        DataSource="@GetFilteredItems(rowData.Category)" PopupWidth="400px">
                <ComboBoxFieldSettings Text="@nameof(dtoItemMaster.ItemCode)" Value="@nameof(dtoItemMaster.ItemCode)" />
                <ComboBoxTemplates TItem="dtoItemMaster">
                    <HeaderTemplate>
                        <div class="row">
                            <div class="col-lg-3" style="width:220px">ItemCode</div>
                            <div class="col-lg-3" style="width:220px">ItemName</div>
                        </div>
                    </HeaderTemplate>
                    <ItemTemplate Context="con">
                        <div class="row">
                            <div class="col-lg-3" style="width:220px">@con.ItemCode</div>
                            <div class="col-lg-3" style="width:220px">@con.ItemName</div>
                        </div>
                    </ItemTemplate>
                </ComboBoxTemplates>
                <ComboBoxEvents TValue="string" TItem="dtoItemMaster" ValueChange="@DropDownOnChange"></ComboBoxEvents>
            </SfComboBox>
        }
    </EditTemplate>
</GridColumn>

3. 处理类别变更后的联动(可选)

若要在Category修改后自动清空不符合新类别的ItemCode,给Category列添加自定义EditTemplate并监听值变更:

修改Category列的EditTemplate

<GridColumn Field=@nameof(dtoItemMasterClassWise.Category) HeaderText="Category" ValidationRules="@(new ValidationRules{ Required=true})" Width="100">
    <EditTemplate>
        @{
            var rowData = context as dtoItemMasterClassWise;
            <SfDropDownList @bind-Value="@rowData.Category" TItem="string" TValue="string" 
                            DataSource="@YourCategoryDataSource"> <!-- 替换为你的类别数据源 -->
                <DropDownListEvents ValueChange="@(args => OnCategoryUpdated(args, rowData))"></DropDownListEvents>
            </SfDropDownList>
        }
    </EditTemplate>
</GridColumn>

添加类别变更处理方法

private void OnCategoryUpdated(Syncfusion.Blazor.DropDowns.ChangeEventArgs<string, string> args, dtoItemMasterClassWise rowData)
{
    // 检查当前ItemCode是否属于新类别,不属于则清空
    var isValidItem = GetFilteredItems(args.Value).Any(item => item.ItemCode == rowData.ItemCode);
    if (!isValidItem)
    {
        rowData.ItemCode = string.Empty;
        rowData.ItemName = string.Empty; // 同步清空ItemName
    }
}

4. 同步更新ItemName列(可选)

在DropDownOnChange方法中同步更新ItemName,确保与选中的ItemCode匹配:

private void DropDownOnChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs<string, dtoItemMaster> args)
{
    var rowData = args.Item as dtoItemMasterClassWise;
    if (rowData != null)
    {
        var selectedItem = ItemMasterList.FirstOrDefault(item => item.ItemCode == args.Value);
        if (selectedItem != null)
        {
            rowData.ItemName = selectedItem.ItemName;
        }
    }
}

内容的提问来源于stack exchange,提问作者SHUHAIRA K.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:30:11