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

WinForm C#:基于城市与类型双条件填充ComboBox

WinForm C#:基于城市与类型双条件填充ComboBox

嘿,我懂你的需求啦!你已经搞定了根据选中城市过滤类型下拉框的逻辑,现在就差最后一步——同时用城市和选中的类型两个条件来筛选用户名的ComboBox对吧?你的当前代码只用到了CityID作为筛选条件,只需要给筛选表达式加上TypeName的判断就行,很简单的!

修改cboType_SelectedIndexChanged方法

你只需要在原来的筛选语句里,用AND把CityID和TypeName两个条件组合起来。注意因为TypeName是字符串类型,在筛选表达式里要给它加上单引号,不然会触发语法错误。

修改后的代码如下:

private void cboType_SelectedIndexChanged(object sender, EventArgs e)
{
    // 先拿到当前选中的城市ID和类型名称
    int selectedCityID = (int)dtSpecificType.Rows[cboType.SelectedIndex]["CityID"];
    string selectedTypeName = dtSpecificType.Rows[cboType.SelectedIndex]["TypeName"].ToString();

    // 组合双条件进行筛选
    var filteredRows = dtUserName.Select($"CityID = {selectedCityID} AND TypeName = '{selectedTypeName}'");
    
    // 处理筛选结果,避免空结果报错
    if(filteredRows.Length > 0)
    {
        dtSpecificUserNames = filteredRows.CopyToDataTable();
        combobox1.DataSource = dtSpecificUserNames;
    }
    else
    {
        // 没有匹配用户时清空下拉框,也可以加个提示项
        combobox1.DataSource = null;
        // combobox1.Items.Add("暂无匹配用户");
        // combobox1.SelectedIndex = 0;
    }
    combobox1.DisplayMember = "Username";
}

额外的优化建议

如果你想更规范一点(避免字符串拼接的潜在问题),也可以用DataView来做筛选,逻辑是一样的:

private void cboType_SelectedIndexChanged(object sender, EventArgs e)
{
    int selectedCityID = (int)dtSpecificType.Rows[cboType.SelectedIndex]["CityID"];
    string selectedTypeName = dtSpecificType.Rows[cboType.SelectedIndex]["TypeName"].ToString();

    DataView userView = new DataView(dtUserName);
    userView.RowFilter = $"CityID = {selectedCityID} AND TypeName = '{selectedTypeName}'";
    
    combobox1.DataSource = userView;
    combobox1.DisplayMember = "Username";
}

这样调整后,你的combobox1就会根据当前选中的城市和类型,精准筛选出对应的用户名啦!整个流程逻辑是通顺的:

  • 加载城市列表 → 选城市过滤类型 → 选类型过滤用户名,完美实现双条件联动。

备注:内容来源于stack exchange,提问作者Davesexcel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:48:07