Ajouter des Éléments à la zone de liste déroulante à partir d'un objet IEnumerable
J'ai un System.Timers.Timer
que les mises à jour de mon formulaire de gagner les composants de l'application dans toutes les 5 secondes.
J'ai un comboBox et mondial IEnumerable<Person>
liste mise à jour en everty 5 secondes.
J'ai besoin d'ajouter des personnes au nom de zone de liste déroulante. Si le nom est déjà dans la liste, je ne devrais pas ajouter.
Comment puis-je procéder?
Voici le code à l'intérieur de l'événement timer. Cela ajoute à plusieurs reprises et je ne suis pas sûr de le faire avec foreach,
peut-être IEnumareble
interface a un moyen plus facile.
foreach (Persons person in personsList)
{
comboBox.Items.Add(person.Name);
}
- Vous voulez peut-être faire de la recherche sur la liaison de données
- Si je lier les données de la cmb.DataSource = personsList; cmb.DisplayMember = "Sujet"; Cela ne marchera pas
- Pourquoi ne pas simplement effacer les Éléments, puis AddRange l'interface IEnumerable?
Vous devez vous connecter pour publier un commentaire.
C'est l'un des plus simple des solutions à ce problème, en supposant que vous êtes en utilisant .NET 3.5 ou plus:
Si vous utilisez 3.0 ou une version antérieure, vous devrez le faire vous-même la recherche:
Si possible à l'aide de La liaison de données est généralement bonne. WPF a même plus agréable de liaison permettant MVVM. WPF serait effectivement faire les modifications que vous modifiez la collection originale (en temps réel) et ne pas avoir à readd tous à chaque passage.
Réinstallant tous les éléments à chaque passage est une mauvaise approche, mais ses la voie de la facilité. Il serait préférable de modifier la zone de liste directement si le code le permet (pas trop de mises à jour, pas trop de temps critique) ou pour faire une copie de la liste et de n'effectuer que des différences. (Col 1: Supprimer tous les éléments dans la zone de liste déroulante qui n'existe pas dans la nouvelle liste. Étape 2: Ajoutez des articles dans la nouvelle liste qui n'existe pas dans la zone de liste déroulante)
Un couple d'approches pourrait être à pied tous les éléments dans la zone de liste déroulante, ou vous pouvez garder une trace d'une Liste de noms que vous avez déjà ajoutés. Avez-vous des exigences de performance?
Plus facile serait de simplement se lier directement à la liste des Personnes et de définir votre DisplayMember de façon appropriée...
Il ne fonctionne pas pour moi aussi. Après quelques essayant trouvé cette solution, peut-être que ça va aider quelqu'un:
Une plus approche la plus simple est:
Tout ce qui n'est efface la zone de liste déroulante et ajoute de l'ensemble de la liste. Ou si vous ne vous sentez pas comme l'effacement de la zone de liste déroulante:
Vous n'avez pas besoin de la
foreach
plus. Il suffit de remplacer tous vos codes avec cette!.ToArray()
, car il est dit: "impossible de convertir de 'Système.Les Collections.Génériques.IEnumerable<string>' à 'object[]'"