如何删除/删除数据绑定组合框?SelectedIndex = -1不起作用

bob*_*bbo 10 .net c# combobox winforms

我试图在我的Windows窗体应用程序中取消选择(删除)一些组合框.在我的应用程序中,我有一个Reset方法,它将每个组合的SelectedIndex设置为-1.我的所有组合框都是数据绑定的,即每个组合框都使用数据源填充.

我注意到有时我的Reset方法有效,即它取消选择当前选中的项目并清空组合.但是,在我尝试将其设置为-1之后,它会直接选择第一个项目(SelectedIndex = 0).从用户的角度来看,这看起来像一个错误,因为它并不总是"清除"表单.

根据MSDN:

"要取消选择当前选定的项目,请将SelectedIndex设置为-1.如果项目是数据绑定项目,则无法将ComboBox项目的SelectedIndex设置为-1."

有谁知道一项工作?

非常感谢

His*_*ham 21

使用空白和属性的组合

comboBox.ResetText();

 //to reset selected value
comboBox.SelectedIndex = -1;
Run Code Online (Sandbox Code Playgroud)


小智 8

不知道是否有人仍然对此感兴趣,因为现在已经过去了 5 年,但我找到了一个非常简单的解决方法。完全不直观(我只是通过查看参考源代码找到的),但实现起来很简单:

ComboBox1.FormattingEnabled = True;
Run Code Online (Sandbox Code Playgroud)

是的,仅此而已!

如果您好奇,可以仔细阅读源代码以了解发生了什么。看来@CuppM 指出的错误的根本原因是试图在数据源中设置位置:

if (!FormattingEnabled || SelectedIndex != -1) {
    this.DataManager.Position = this.SelectedIndex;
} 
Run Code Online (Sandbox Code Playgroud)

我猜它应该只是 '&&' 而不是 '||' 在这种情况下,因为无论 FormattingEnabled 属性如何,代码可能都不应该将 Position 设置为无效值。

无论如何,它允许一个简单的解决方法。并且由于“格式”属性为空时的默认行为是空操作,因此您无需更改任何其他内容。它只是有效。:-)

(我应该注意,我只在 .NET 4.7 上尝试过这个,所以我不能说它是否适用于 .NET Framework 的早期版本。)


小智 -3

你可以尝试使用这个解决方案..

dataGrid.DataSource = Nothing

dataGrid.DataBind()
Run Code Online (Sandbox Code Playgroud)

希望有帮助!..:D