在组合框中相同的两个项目,但第一个总是被选中C#

use*_*674 4 c# combobox winforms

我的Windows窗体应用程序中的组合框我有一个非常奇怪的问题.

因此,我的组合框使用数据源填充,它显示人员的名称,并将其ID保存为cmbRequestor.ValueMember.

public BindingSource requestorBindingSource = null;
private const string cmdAssoc = "SELECT * FROM assoc_vw ORDER BY assoc_name";
requestorBindingSource.DataSource = populateDataTable(cmdAssoc);

cmbRequestor.DisplayMember = "assoc_name";
        cmbRequestor.ValueMember = "ID";
        cmbRequestor.DataSource = requestorBindingSource;
        cmbRequestor.SelectedIndex = 0;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它工作正常,但如果有一个同名的人的实例,我从组合框中选择第二个名称(同名),由于某种原因,一旦我关闭组合框,它选择第一个名称,即使我选择了第二个名称.

在此输入图像描述

因此,为了确保它们对其名称保持不同的值,我创建了SelectedIndexChanged事件.

private void cmbRequestor_SelectedIndexChanged(object sender, EventArgs e)
    {
        int x = cmbRequestor.SelectedIndex;
        string j = cmbRequestor.SelectedValue.ToString();
        var y = cmbRequestor.Items[x];
    }
Run Code Online (Sandbox Code Playgroud)

当我调试代码并选择第二个名称(同名)时,它背后的ID是3069.一旦我关闭组合框并单击保存以保存表单SelectedIndexChanged再次被触发(这不应该发生)并且它转到第一个具有相同名称和ID的人是不同的.

此控件上没有其他事件,我不会在其他任何地方使用它.如果存在相同名称的实例,则控件看起来很混乱.

E-B*_*Bat 5

将DropDownStyle属性更改为DropDownList.
默认值为DropDown,在这种情况下,所选项目将由列表中的第一个匹配文本确定.DropDown主要与自动完成逻辑结合使用.

编辑:
如果你必须坚持DropDown风格,最好的解决方法是处理DropDownClosed事件,此时你将选择正确的索引.