如何删除/删除数据绑定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的早期版本。)
尝试将null
或String.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