我有两个组合框comboBox1
& comboBox2
。 comboBox1的填充方式如下:
BindingSource comboBox1Bs = new BindingSource();
comboBox1Bs.DataSource = new List<string> { "Apple","Amber","Book","Bean","Cat","Cook"};
comboBox1.DataSource = comboBox1Bs;
组合框2就是这样:
BindingSource comboBox2Bs = new BindingSource();
comboBox2Bs.DataSource = new List<string> { "Aresult","Bresult","Cresult"};
comboBox2.DataSource = comboBox2Bs;
当从组合框1中进行选择时,我只希望以与所选的相同字母开头的结果显示在组合框2中。例如,如果选择Apple,则仅显示Aresult(但如果有更多结果与他们也会表示。)
要从comboBox1获取起始字母,我有以下内容:
var prefix = comboBox1.SelectedItem.ToString().Substring(0, 1);
但是我可以添加什么,所以combox2只会显示与prefix
的内容相同的结果
答案 0 :(得分:1)
您可以使用LINQ来实现这一目标。
List<string> foo = ((List<string>)comboBox2Bs.DataSource).Where(x => x.().Substring(0, 1).StartsWith(prefix));
comboBox2.DataSource = foo;
以下示例应该更好
List<string> foo = ((List<string>)comboBox2Bs.DataSource).Where(x => x.ToString().StartsWith(prefix));
comboBox2.DataSource = foo;
答案 1 :(得分:1)
在列表中创建集合,以便您可以对其进行过滤:
List<string> colComboBox_2 = new List<string> { "Aresult","Bresult","Cresult"};
然后你可以在有前缀时过滤它:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var prefix = comboBox1.SelectedItem.ToString().Substring(0, 1);
comboBox2.DataSource = colComboBox_2.Where(x => x.StartsWith(prefix)).ToList();
}