使用另一个组合框中的选定项首字符开始仅填充组合框

时间:2017-09-01 13:54:03

标签: c# string winforms list combobox

我有两个组合框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的内容相同的结果

2 个答案:

答案 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();
}