C# mise à Jour de zone de liste déroulante liée à la liste générique
J'ai une zone de liste déroulante sur mon formulaire qui est lié à une liste générique de chaîne comme ceci:
private List<string> mAllianceList = new List<string>();
private void FillAllianceList()
{
//Add alliance name to member alliance list
foreach (Village alliance in alliances)
{
mAllianceList.Add(alliance.AllianceName);
}
//Bind alliance combobox to alliance list
this.cboAlliances.DataSource = mAllianceList;
}
L'utilisateur pourra alors ajouter ou supprimer des éléments dans la zone de liste déroulante.
J'ai lu ailleurs qu'il suffit d'ajouter ou de retirer l'élément dans la liste générique, le contenu de la zone de liste déroulante doit être automatiquement mis à jour; même chose devrait se produire si je Tri ().
Mais pour une raison quelconque, je ne peux pas faire ce travail. Je peux voir la zone de liste déroulante de la propriété source de données est correctement mis à jour comme je l'ai ajouter/supprimer/trier les éléments, mais le contenu est affiché dans la zone de liste déroulante ne sont pas celles de la propriété DataSource.
Je suis sûrement raté quelque chose ou fait quelque chose de mal.
Merci à l'avance!
EDIT:
La réponse que j'ai choisi a résolu le problème pour l'ajout et la suppression, mais une BindingList objet ne peut pas être triés, et c'est nécessaire pour moi. J'ai trouvé une solution où une classe personnalisée est construit en héritant BindingList et en ajoutant des fonctionnalités de tri, mais je voudrais savoir si il y a une solution plus simple dans mon cas.
Toutes les suggestions sur la façon de résoudre facilement?
OriginalL'auteur Fueled | 2009-01-11
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple de contourner ce serait tout simplement utiliser une BindingList comme suit:
Puis, à partir de maintenant, juste face à la liaison de la liste pour ajouter et supprimer des éléments à partir de là. Qui permettra de supprimer à la fois à partir de la Liste et de la zone de liste déroulante.
EDIT: pour répondre À votre question concernant le tri, je pense que le plus simple (mais peut-être "hacky" façon de le faire serait quelque chose comme ceci:
Donc en gros, après avoir trié, vous créez une nouvelle liste liaison et de réinitialiser la source de données. Peut-être il ya une façon plus élégante pour aller à ce sujet, cependant, cela devrait fonctionner.
J'ai eu un problème similaire reliant une zone de liste déroulante source de données à une Liste<> (mais avec une Liste<MyCustomClass> au lieu de<string>). J'ai essayé cette solution, mais a eu des problèmes (c'est à dire pas de mises à jour) lors de l'ajout de nouveaux éléments à la Liste<>. J'ai eu de travail en manquant la Liste<> entièrement, et en ajoutant des éléments directement à la BindingList<>.
Il n'y a pas moyen de forcer une zone de liste modifiable à mettre à jour si BindingList n'est pas disponible? (J'ai utiliser une Liste générique comme BindingList est beaucoup plus simple objet sans certains des Linq méthodes dont nous avons besoin, comme .RemoveAll()
OriginalL'auteur BFree