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

标签 c# winforms combobox

我的 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;

enter image description here

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

enter image description here

因此,为了确保它们的名称具有不同的值,我创建了 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。一旦我关闭组合框并单击“保存”以保存表单,SelectedIndexChanged 将再次触发(这不应该发生)并且它转到具有相同名称且其 ID 不同的第一个人。

此控件上没有其他事件,我也没有在其他任何地方使用它。如果存在同名实例,看起来控件本身会感到困惑。

最佳答案

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

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

关于c# - 组合框中的两个项目相同但第一个总是被选中 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581471/

相关文章:

c# - 如何告诉 Json.NET 忽略第 3 方对象中的属性?

winforms - Infragistics 中的复选框列赢得了 ultragrid

c# - 富文本框最大长度

javascript - ExtJS 4 使用渲染器加载网格内组合的存储(只是数组)

c# - 如何以编程方式刷新组合框的项目源的绑定(bind)?

c# - 如何验证我分配给组合框的字典值是我认为的值?

c# - 串行通信中的分割消息

c# - 从命令行使用 IIS 运行 C# 类库

c# - app.config 文件 C# winforms 保留连接字符串

c# - ServiceStack 选择投影未按预期工作