11

我用谷歌搜索了很多。也发现了很多。不幸的是,没有什么是直截了当的,简单的,最重要的是,简单的。我希望有人写 amethodList<string>删除 previous Items,然后设置 this List<string>

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

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

5 回答 5

19

对于任何仍然想知道的人。

您可以使用 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 引用进行排序,它将再次反映在组合框中。

于 2014-09-12T13:00:25.400 回答
10

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

这段代码工作得很好

public void refreshList(List<string> list){
    albumList.DataSource =  list;
}
于 2012-12-30T08:35:47.597 回答
5

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

albumList.DataSource = list;

或者可以肯定:

albumList.DataSource = null;
albumList.DataSource = list;
于 2012-12-30T08:30:03.040 回答
2

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

albumList.DataSource = null;
albumList.Items.Clear();
albumList.DataSource = list;
于 2018-03-09T15:44:24.570 回答
0

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

将数据源设置为 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();
    }
    
于 2018-06-08T12:07:36.413 回答