我用谷歌搜索了很多。也发现了很多。不幸的是,没有什么是直接、容易的,最重要的是,简单的。我希望有人写一个
method
,它接受 List<string>
并删除之前的 Items
,然后设置这个 List<string>
。
目前我有一个方法,但它并非没有错误。
public void refreshList(List<string> list){
albumList.Items.Clear();
albumList.DataSource = list;
}
对于任何仍然想知道的人。
您可以使用 BindingList 和 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 引用进行排序,它将再次反映在组合框中。
你不需要 albumList.Items.Clear();
这段代码工作得很好
public void refreshList(List<string> list){
albumList.DataSource = list;
}
绑定到数据源时,
Items.Clear();
不起作用。这应该是:
albumList.DataSource = list;
或者可以肯定的是:
albumList.DataSource = null;
albumList.DataSource = list;
如果您使用数据源,您需要清除项目才能显示新列表。 由于使用 DataSource 时无法清除,因此需要先将其设置为 null。
albumList.DataSource = null;
albumList.Items.Clear();
albumList.DataSource = list;
我一直在处理类似问题的任务
将数据源设置为 null 并将列表重新分配回它的初始解决方案根本不起作用。尽管它确实清除了项目并在列表中显示了新项目,但它使得无法选择该列表中的任何项目。但在互联网上挖掘后,我发现了一个旧的 VB 解决方案,它最终可以工作并达到预期的效果。
这是您需要做的:
重新填充列表对象之前先清除它。请参阅下面的代码:
//adding the instantiation of the list object so you know what I'm clearing
List<string> listExample = new List<string>();
listExample.Clear();
刷新组合框,以便它选取新列表。请参阅下面的代码:
if (albumList.DataSource == null)
{
albumList.DataSource = listExample;
}
else
{
albumList.Refresh();
}
仅在按下保存或显示按钮后直接将数据表变量公开 组合框.datasource =dt;