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

无需DataTable实现Cascading combo box级联下拉的方案咨询

实现方案

该需求完全可以实现,无需依赖Sql.Data/DataTable组件,现有代码的问题主要是控件配置、语法和逻辑疏漏,修正后即可正常运行。

现有代码问题梳理

  • 控件未开启回发:rdpUnidade需要设置AutoPostBack="true"属性,否则选中值变更不会触发SelectedIndexChanged事件
  • 方法定义错误:rdpUnidade_SelectedIndexChanged方法被错误嵌套在Page_Load的!IsPostBack判断块内,属于无效语法,无法被系统调用
  • 过滤逻辑未生效:你已经按单位ID筛选出了InvUnidade人员集合,但最终给第二个下拉框绑定的还是全量人员数据,过滤结果没有被使用
  • 绑定步骤不全:设置DataSource后没有调用DataBind()方法让配置生效,也没有处理旧选项清空、默认空选项保留的逻辑

修正后代码

1. 前端控件配置(aspx)

<telerik:RadComboBox ID="rdpUnidade" runat="server" 
    DataValueField="ID" 
    DataTextField="NomeUnidade"
    AutoPostBack="true" 
    OnSelectedIndexChanged="rdpUnidade_SelectedIndexChanged">
</telerik:RadComboBox>

<telerik:RadComboBox ID="rdpInvestigador" runat="server" 
    DataValueField="ID" 
    DataTextField="Nome">
</telerik:RadComboBox>

2. 后台C#代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // 绑定第一个下拉框(单位)
        rdpUnidade.DataSource = new BLLUnidade().GetAll();
        rdpUnidade.DataBind();
        // 可选:给第一个下拉框也加默认空选项
        rdpUnidade.Items.Insert(0, new RadComboBoxItem("", ""));
        
        // 初始化第二个下拉框,默认显示空选项
        rdpInvestigador.Items.Insert(0, new RadComboBoxItem("", ""));
    }
}

private void rdpUnidade_SelectedIndexChanged(object sender, EventArgs e)
{
    rdpInvestigador.Items.Clear();
    // 单位未选中时只保留空选项
    if (string.IsNullOrEmpty(rdpUnidade.SelectedValue))
    {
        rdpInvestigador.Items.Insert(0, new RadComboBoxItem("", ""));
        return;
    }
    
    int unidadeId = Convert.ToInt32(rdpUnidade.SelectedValue);
    // 筛选对应单位的人员
    var filteredInvestigadores = new BLLRecursoHumano().GetAll()
        .Where(rh => rh.id == unidadeId)
        .ToList();
    
    rdpInvestigador.DataSource = filteredInvestigadores;
    rdpInvestigador.DataBind();
    // 插入默认空选项
    rdpInvestigador.Items.Insert(0, new RadComboBoxItem("", ""));
}

Object Data Source实现方式参考

如果要用ObjectDataSource实现,只需要给rdpInvestigador绑定的ObjectDataSource设置SelectParameters,参数值取rdpUnidade的选中值,设置rdpUnidade的AutoPostBack="true"即可,无需手写事件逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:15:01