【问题标题】:Refresh ComboBox Items, easiest way刷新组合框项目,最简单的方法
【发布时间】:2012-12-30 08:25:54
【问题描述】:

我用谷歌搜索了很多。也发现了很多。不幸的是,没有什么是直截了当的,简单的,最重要的是,简单的。我希望有人写一个method 接受List<string> 并删除以前的Items,然后设置这个List<string>

目前我有一个方法,但它不是没有错误的。

public void refreshList(List<string> list){
    albumList.Items.Clear();
    albumList.DataSource =  list;
}

【问题讨论】:

标签: c# winforms c#-4.0 combobox


【解决方案1】:

对于仍然想知道的人。

您可以使用 BindlingList 和 BindingSource。

BindingList<YOUR_CLASS_TYPE> bindinglist = new BindingList<YOUR_CLASS_TYPE>()
BindingSource bSource = new BindingSource();
bSource.DataSource = bindinglist;
ComboBox.DataSource = bSource;

您将所有项目添加到您的绑定列表中,它们将在您的组合框中自动更新。

如果您想要一个可排序的组合框,您可以使用继承自 IList 的容器构造 BindingList,例如具有排序功能的 List。然后,您可以对该 IList 引用进行排序,它将再次反映在组合框中。

【讨论】:

  • 这个还有一个问题;如果您将 Bi​​ndingList 设置为可编辑网格的源,并且相同的 BindingList(通过引用)将用于另一种形式,仅用于显示;编辑网格中的项目不会刷新其他表单中的项目。所以只是为了完成你的答案;在我描述的情况下,只需使用BindingList.ResetBindings(); 来刷新所有使用绑定列表的控件中的项目。
  • 是的,这是一个警告。谢谢!
  • 非常感谢您发布此消息!!!我研究了 3 个小时,阅读了十几篇文章、博客和 MSDN 文章。我很高兴它以这样的简单修复结束,而不是这些资源中的很多推荐:)!
  • 组合框显示类名(带命名空间)而不是值?
  • 根据上述评论,我需要重新分配组合框的显示成员和值成员
【解决方案2】:

你不需要albumList.Items.Clear();

这段代码运行良好

public void refreshList(List<string> list){
    albumList.DataSource =  list;
}

【讨论】:

  • 新项目未出现在列表中。
  • 是的,它奏效了。我没有重置以前的列表。现在,我在做list = null;,然后是list = new List&lt;string&gt;();,然后我打电话给refreshList(list);。所以,它的工作。谢谢你:)
【解决方案3】:

绑定到数据源时,Items.Clear(); 不起作用。这应该是:

albumList.DataSource = list;

或者确定:

albumList.DataSource = null;
albumList.DataSource = list;

【讨论】:

  • 以前的项目不会被删除,这样。相反,新项目会附加上一个。
【解决方案4】:

如果您使用的是 DataSource,则需要清除项目以显示新列表。 由于在使用 DataSource 时无法清除,因此需要先将其设置为 null。

albumList.DataSource = null;
albumList.Items.Clear();
albumList.DataSource = list;

【讨论】:

    【解决方案5】:

    我一直在处理类似问题的任务

    将数据源设置为 null 并将列表重新分配给它的初始解决方案根本不起作用。尽管它确实清除了项目并显示了列表中的新项目,但它使选择该列表中的任何项目成为不可能。但是在互联网上挖掘后,我发现了一个旧的 VB 解决方案,它最终可以工作并达到预期的效果。

    这是你需要做的:

    1. 在重新填充之前清除列表对象。见以下代码:

      //adding the instantiation of the list object so you know what I'm clearing
      List<string> listExample = new List<string>();
      listExample.Clear();
      
    2. 刷新组合框,以便它选择新列表。见以下代码:

      if (albumList.DataSource == null) 
      { 
          albumList.DataSource = listExample; 
      } 
      else 
      {
          albumList.Refresh();
      }
      

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 2011-01-11
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多