我的 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;
它工作正常,但如果有一个同名的人的实例,并且我从组合框中选择了第二个名称(同名),出于某种原因,一旦我关闭组合框,即使我选择了第二个名称,它也会选择第一个名称。
因此,为了确保它们的名称具有不同的值,我创建了 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 主要与自动完成逻辑结合使用。
EDIT:
如果您必须坚持使用 DropDown 样式,最好的解决方法是处理 DropDownClosed 事件,此时您将选择正确的索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)