Обновить элементы ComboBox, самый простой способ

Я много гуглил. И много чего нашел. К сожалению, нет ничего прямого, легкого и, самое главное, простого. Я хочу, чтобы какой-нибудь парень написал method что происходит List<string> и удаляет предыдущие Items, тогда установите это List<string>.

в настоящее время у меня есть метод, но он не без ошибок.

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

5 ответов


вам не нужен список альбомов.Предметы.Clear();

этот код работает просто отлично

public void refreshList(List<string> list){
    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;

вы добавляете все элементы в свой bindinglist, и они будут автоматически обновляться в вашем combobox.

Если вам нужен сортируемый combobox, вы можете создать BindingList с контейнером, который наследуется от IList, например List, который имеет функцию сортировки. Затем вы можете отсортировать эту ссылку IList, и она будет отражена снова в поле со списком.


при привязке к источнику данных,Items.Clear(); не работает. Это должно быть:

albumList.DataSource = list;

или, чтобы быть уверенным:

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

Если вы используете источник данных, вам нужно очистить элементы для появления нового списка. Поскольку вы не можете очистить при использовании источника данных, вам нужно сначала установить его в null.

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

Я работаю над задачей с подобной проблемой, как это

начальное решение установить источник данных в null и переназначить список обратно в него не сработало вообще. Хотя он очистил элементы и показал новые элементы в списке, он сделал выбор любого из элементов в этом списке невозможным. Но, покопавшись в Интернете, я нашел старое решение VB, которое в конечном итоге работало и имело предполагаемый эффект.

вот что вам нужно do:

  1. очистить список объектов до заселения ее. См. код ниже:

    //adding the instantiation of the list object so you know what I'm clearing
    List<string> listExample = new List<string>();
    listExample.Clear();
    
  2. обновите comboBox, чтобы он поднял новый список. См. код ниже:

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