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

我的Windows窗体应用程序中的combobox我有一个非常奇怪的问题。

所以我的combobox是使用数据源填充的,它显示人的名字,并将其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; 

在此处输入图像描述

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

在此处输入图像描述

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

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

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

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

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

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

我发现如果我在Properties中将FormattingEnabled设置为false,那就可以了。

我也有同样的问题……对我来说最好的解决方案是将combobox的DropDown Style属性更改为DropDownList。 当我需要DropDown样式(例如在combobox中输入新数据)时,我在代码中将属性更改为DropDown …并在完成后更改回DropDownList。

尝试使用combobox的ComboBox.SelectionChangeCommitted事件,也许您需要删除默认选择的索引,该索引设置为零