刷新组合框项目,最简单的方法

本文关键字:最简单 方法 项目 组合 刷新 | 更新日期: 2023-09-27 17:49:51

我在谷歌上搜索了很多。也发现了很多。不幸的是,没有什么是直接的,容易的,最重要的是,简单的。我希望有人写一个method,它取List<string>,去掉之前的Items,然后设置这个List<string>

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

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

刷新组合框项目,最简单的方法

还有人想知道。

你可以使用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一样,它有一个排序函数。然后,您可以对illist引用进行排序,它将再次反映在组合框中。

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

这段代码运行正常

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

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

albumList.DataSource = list;

或者:

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

如果您正在使用DataSource,则需要清除项以显示新列表。因为你不能在使用DataSource时清除,所以你需要先将其设置为null。

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

我一直在做一个类似这样的问题的任务

将数据源设置为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();
    }