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

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

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

根据MSDN:

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

有谁知道一个工作?

非常感谢

使用空白和属性的组合

comboBox.ResetText(); //to reset selected value comboBox.SelectedIndex = -1; 

您可以尝试将Selected Value或Item设置为null (VB中Nothing

我无法记住抛出exception的行为。 但是,我确实记得在通常通过数据绑定事件进行数据绑定后,我曾经在combobox中插入一个名为-1,(None)的值。 我建议在List中获取数据并将新值插入此列表。 现在将组合绑定到列表。

只有以下代码适用于我,所以尝试:

 comboBox.ResetText(); //framework 4.0 

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

 ComboBox1.FormattingEnabled = True; 

是的,这就是它的全部!

如果你很好奇,你可以仔细阅读源代码 ,看看发生了什么。 似乎@CuppM指出的bug的根本原因是尝试在数据源中设置位置:

 if (!FormattingEnabled || SelectedIndex != -1) { this.DataManager.Position = this.SelectedIndex; } 

我猜它应该只是’&&’而不是’||’ 在条件中,因为代码可能不应该将Position设置为无效值,而不管FormattingEnabled属性如何。

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

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

尝试将nullString.Empty分配给SelectedValue属性。

如果您的目标框架是4.0 – 这是解决方案:

安装.Net Framework 4.5(不要更改项目的目标框架,只需安装框架)。 安装后,该行取消选择数据绑定combobox:

 combobox.SelectedValue = 0; 

我的值成员是“Id”int主键自动增量,因此该字段不包含值0.但是,这不适用于不支持.net45的Windows版本

尝试设置[ComboBoxObj] .SelectedIndex = -1; 这将使它成为空值。 -1表示取消选择或取消combobox的值

谢谢

我有一段时间有这个问题,但如果你使用:

‘ComboBox.ResetText();’

它将使文本“”并使combobox中的项目不受影响。

我在我的应用程序中使用了以下代码

  private void UpdateComboBox(ComboBox Box, string Group, List Numbers) { Box.Items.Clear(); Box.BeginUpdate(); Box.Items.Add("<>"); foreach (string item in Numbers) { if(item != "") Box.Items.Add(item); } Box.EndUpdate(); Box.ResetText(); } 

所以,一旦所有项目都在combobox中,我最后运行该方法。

ComboBox1.SelectedItem = null;

添加到你的combobox一个空项目,如下所示:

 cb.Items.Add(""); 

在此之后,您可以通过选择最后一个cb项取消选择combobox:

 cb.SelectedIndex = cb.Items.Count - 1; 

你去!

你的combobox中最后一个位置是空的,但它不会打扰你。 会吗? 🙂

您可以尝试使用此解决方案..

 dataGrid.DataSource = Nothing dataGrid.DataBind() 

希望它的帮助!..:D