J'ai beaucoup cherché sur Google. Trouvé beaucoup aussi. Malheureusement, rien n'est simple, facile et surtout simple. Je veux qu'un gars écrive une method
qui prend un List<string>
et supprime la précédente Items
, puis définit ce List<string>
.
Actuellement, j'ai une méthode mais ce n'est pas sans erreur.
public void refreshList(List<string> list){
albumList.Items.Clear();
albumList.DataSource = list;
}
Vous n'avez pas besoin de albumList.Items.Clear ();
Ce code fonctionne très bien
public void refreshList(List<string> list){
albumList.DataSource = list;
}
Pour ceux qui se demandent encore.
Vous pouvez utiliser BindlingList et BindingSource.
BindingList<YOUR_CLASS_TYPE> bindinglist = new BindingList<YOUR_CLASS_TYPE>()
BindingSource bSource = new BindingSource();
bSource.DataSource = bindinglist;
ComboBox.DataSource = bSource;
Vous ajoutez tous les éléments à votre liste de liens et ils seront automatiquement mis à jour dans votre liste déroulante.
Si vous voulez une liste déroulante triable, vous pouvez construire la BindingList avec un conteneur qui hérite de IList, comme Liste ayant une fonction de tri. Vous pouvez ensuite trier cette référence IList et elle sera reflétée à nouveau dans la liste déroulante.
Lorsqu'il est lié à une source de données, Items.Clear();
ne fonctionne pas. Cela devrait être:
albumList.DataSource = list;
ou pour être sûr:
albumList.DataSource = null;
albumList.DataSource = list;
Si vous utilisez DataSource, vous devez effacer les éléments pour que la nouvelle liste apparaisse. Comme vous ne pouvez pas effacer tout en utilisant DataSource, vous devez d'abord le définir sur null.
albumList.DataSource = null;
albumList.Items.Clear();
albumList.DataSource = list;
Je travaille sur une tâche avec un problème similaire comme celui-ci
La solution initiale consistant à définir la source de données sur null et à réaffecter la liste à celle-ci ne fonctionnait pas du tout. Bien qu'il ait effacé les éléments et affiché les nouveaux éléments de la liste, il a été impossible de sélectionner l'un des éléments de cette liste. Mais après avoir fouillé dans Internet, j’ai trouvé une ancienne solution VB qui fonctionnait et qui produisait l’effet recherché.
Voici ce que vous devez faire:
Effacer l'objet de la liste avant de le repeupler. Voir le code ci-dessous:
//adding the instantiation of the list object so you know what I'm clearing
List<string> listExample = new List<string>();
listExample.Clear();
Actualisez la liste déroulante afin qu’elle récupère la nouvelle liste. Voir le code ci-dessous:
if (albumList.DataSource == null)
{
albumList.DataSource = listExample;
}
else
{
albumList.Refresh();
}