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

