如何选择/清空数据绑定组合框?选定索引 = -1 不起作用

本文关键字:索引 不起作用 组合 数据绑定 何选择 选择 清空 | 更新日期: 2023-09-27 18:32:56

我正在尝试取消选择(清空(我的Windows表单应用程序中的一些组合框。在我的应用程序中,我有一个 Reset 方法,该方法将每个组合的 SelectedIndex 设置为 -1。我的所有组合框都是数据绑定的,即每个组合框都使用数据源填充。

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

根据MSDN:

"要取消选择当前选定的项目,请将 SelectedIndex 设置为 -1。如果组合框项是数据绑定项,则不能将该项的选定索引设置为 -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();

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

如果你的目标框架是 4.0 - 这是解决方案:

安装 .

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

combobox.SelectedValue = 0;

我的值成员是"Id"整数主键自动递增,因此该字段不包含值 0。但是,这不适用于不支持.net45

我遇到这个问题已经有一段时间了,但是如果您使用:

'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