如何选择/清空数据绑定组合框?选定索引 = -1 不起作用
本文关键字:索引 不起作用 组合 数据绑定 何选择 选择 清空 | 更新日期: 2023-09-27 18:32:56
我正在尝试取消选择(清空(我的Windows表单应用程序中的一些组合框。在我的应用程序中,我有一个 Reset 方法,该方法将每个组合的 SelectedIndex 设置为 -1。我的所有组合框都是数据绑定的,即每个组合框都使用数据源填充。
我注意到有时我的 Reset 方法有效,即它取消选择当前选定的项目并空白组合。但是,其他时候,在我尝试将其设置为 -1 后,它会直接选择第一项 (SelectedIndex = 0(。从用户的角度来看,这看起来像一个错误,因为它并不总是"清除"表单。
根据MSDN:
"要取消选择当前选定的项目,请将 SelectedIndex 设置为 -1。如果组合框项是数据绑定项,则不能将该项的选定索引设置为 -1。
有谁知道变通方法吗?
非常感谢
使用空和属性的组合
comboBox.ResetText();
//to reset selected value
comboBox.SelectedIndex = -1;
不知道是否有人仍然对此感兴趣,因为它是 5 年后的现在,但我找到了一个非常简单的解决方法。 完全不直观(我只是通过查看参考源代码才找到它(,但实现起来很简单:
ComboBox1.FormattingEnabled = True;
是的,这就是它的全部内容!
如果你好奇,你可以仔细阅读源代码,看看发生了什么。 看来@CuppM注意到的错误的根本原因是尝试在数据源中设置位置:
if (!FormattingEnabled || SelectedIndex != -1) {
this.DataManager.Position = this.SelectedIndex;
}
我猜它应该只是条件中的"&&"而不是"||",因为无论 FormattingEnabled 属性如何,代码都不应该将 Position 设置为无效值。
无论如何,它允许一个简单的解决方法。 由于"Format"属性为空时的默认行为是无操作,因此您不必更改任何其他内容。 它只是工作。:-)
(我应该注意的是,我只在 .NET 4.7 中尝试过这个,所以我不能说它是否适用于以前版本的 .NET Framework。
您可以尝试将所选值或项目设置为 null
( VB 中的Nothing
(
我不记得抛出异常的行为。但是,我确实记得我曾经在组合框中插入一个名为 -1(None( 的值,因为它通常通过 databind 事件进行数据绑定。我建议在列表中获取数据并将新值插入此列表。立即将组合绑定到列表。
只有以下代码对我有用,所以请尝试:
comboBox.ResetText(); //framework 4.0
ComboBox1.SelectedItem = null;
对于仍在看这篇旧帖子的人,我想从希沙姆的回答中添加一个注释。
确保在插入他的代码后清除您的列表。
comboBox.ResetText();
//to reset selected value
comboBox.SelectedIndex = -1;
comboBox.Items.Clear();
尝试将null
或String.Empty
分配给SelectedValue
属性。
如果你的目标框架是 4.0 - 这是解决方案:
安装 .Net Framework 4.5(不要更改项目的目标框架,只需安装框架(。安装后,该行将取消选择数据绑定组合框:
combobox.SelectedValue = 0;
我的值成员是"Id"整数主键自动递增,因此该字段不包含值 0。但是,这不适用于不支持.net45
尝试设置[ComboBoxObj]。选定索引=-1;这将使它成为空值。-1 表示取消选择或取消组合框的值
谢谢
我遇到这个问题已经有一段时间了,但是如果您使用:
'ComboBox.ResetText((;'
它将使文本"并使组合框中的项目不受影响。
我在应用程序中使用了以下代码
private void UpdateComboBox(ComboBox Box, string Group, List<string> Numbers)
{
Box.Items.Clear();
Box.BeginUpdate();
Box.Items.Add("<<Add Contact>>");
foreach (string item in Numbers)
{
if(item != "")
Box.Items.Add(item);
}
Box.EndUpdate();
Box.ResetText();
}
因此,一旦所有项目都在组合框中,我最后一次运行该方法。
试试这行代码:
combobox1.Items.clear();
它对我有用。
在主窗体创建完成之前添加组合框的数据源时,将索引设置为 -1 对我不起作用。唯一对我有用的是首先创建控件并将它们添加到窗体中。
在 Form_load 方法中,最后调用一个方法,该方法分配组合框的数据源并将所选索引设置为 -1。
将一个空项目添加到您的组合框中,如下所示:
cb.Items.Add("");
在此之后,您可以通过选择最后一个 cb 项目来取消选择您的组合框:
cb.SelectedIndex = cb.Items.Count - 1;
给你!
你的组合框中最后一个位置是空的,但它不会打扰你。 会吗? :-(
我收到以下错误:
位置 0 处没有行
当我将ComboBox.SelectedItem
设置为-1
时.
用ComboBox.ResetText()
替换工作正常。这是使用 .Net 4.6.1,VS2013 默认TextFormatting = True
ComboBoxes
.
您可以尝试使用此解决方案。
dataGrid.DataSource = Nothing
dataGrid.DataBind()
希望它有帮助..:D