刷新ComboBox项目,最简单的方法

Coo*_*ain 8 c# combobox winforms c#-4.0

我google了很多.发现了很多.不幸的是,没有什么是直的,简单的,最重要的是,简单.我想要一些人写一个method拿a List<string>并删除之前的Items,然后设置它List<string>.

目前我有一个方法,但它没有错误.

public void refreshList(List<string> list){
    albumList.Items.Clear();
    albumList.DataSource =  list;
}
Run Code Online (Sandbox Code Playgroud)

小智 16

对于任何仍在疑惑的人.

您可以使用BindlingList和BindingSource.

BindingList<YOUR_CLASS_TYPE> bindinglist = new BindingList<YOUR_CLASS_TYPE>()
BindingSource bSource = new BindingSource();
bSource.DataSource = bindinglist;
ComboBox.DataSource = bSource;
Run Code Online (Sandbox Code Playgroud)

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

如果你想要一个可排序的组合框,你可以用一个继承自IList的容器构造BindingList,比如具有sort函数的List.然后,您可以对IList引用进行排序,它将在组合框中再次反映出来.

  • 这还有一个问题; 如果您将BindingList设置为可编辑网格的源,并且相同的BindingList(通过引用)将以另一种形式用于显示; 编辑网格中的项目不会刷新另一种形式的项目.所以只是为了完成你的答案; 在我描述的情况下,只需使用`BindingList.ResetBindings();`来刷新使用绑定列表的所有控件中的项. (2认同)

phn*_*kha 6

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

这段代码工作得很好

public void refreshList(List<string> list){
    albumList.DataSource =  list;
}
Run Code Online (Sandbox Code Playgroud)

  • 新项目不会出现在列表中. (5认同)

Tho*_*mar 5

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

albumList.DataSource = list;
Run Code Online (Sandbox Code Playgroud)

或者确定:

albumList.DataSource = null;
albumList.DataSource = list;
Run Code Online (Sandbox Code Playgroud)