Je ne lierais probablement pas les données car il s'agit d'une énumération, et cela ne changera pas après la compilation (à moins que je ne connaisse un de ces moments stoopid ).
Mieux vaut simplement parcourir l'énumération:
Dim itemValues As Array = System.Enum.GetValues(GetType(Response))
Dim itemNames As Array = System.Enum.GetNames(GetType(Response))
For i As Integer = 0 To itemNames.Length - 1
Dim item As New ListItem(itemNames(i), itemValues(i))
dropdownlist.Items.Add(item)
Next
Ou la même chose en C #
Array itemValues = System.Enum.GetValues(typeof(Response));
Array itemNames = System.Enum.GetNames(typeof(Response));
for (int i = 0; i <= itemNames.Length - 1 ; i++) {
ListItem item = new ListItem(itemNames[i], itemValues[i]);
dropdownlist.Items.Add(item);
}
Utilisez la classe d'utilitaire suivante
Enumeration
pour obtenir uneIDictionary<int,string>
(paire valeur et nom d' énumération ) à partir d'une énumération ; vous liez ensuite l' IDictionary à un contrôle pouvant être lié.Exemple: utilisation de la classe utilitaire pour lier les données d'énumération à un contrôle
la source
J'utilise ceci pour ASP.NET MVC :
la source
Ma version est juste une forme compressée de ce qui précède:
la source
Chaque type Enum dérive de System.Enum. Il existe deux méthodes statiques qui permettent de lier les données à un contrôle de liste déroulante (et de récupérer la valeur). Ce sont Enum.GetNames et Enum.Parse. À l'aide de GetNames, vous pouvez vous lier à votre contrôle de liste déroulante comme suit:
Maintenant, si vous voulez que la valeur Enum revienne sur la sélection ...
la source
Après avoir lu tous les articles, j'ai proposé une solution complète pour prendre en charge l'affichage de la description de l'énumération dans la liste déroulante ainsi que la sélection de la valeur appropriée dans le modèle dans la liste déroulante lors de l'affichage en mode d'édition:
énumération:
classe d'extension enum:
Classe de modèle:
et voir:
et si vous utilisez cette liste déroulante sans liaison avec Model, vous pouvez l'utiliser à la place:
Ainsi, vous pouvez vous attendre à ce que votre liste déroulante affiche Description au lieu des valeurs d'énumération. En ce qui concerne également la modification, votre modèle sera mis à jour par la valeur sélectionnée dans le menu déroulant après la publication de la page.
la source
Comme d'autres l'ont déjà dit, ne reliez pas de données à une énumération, sauf si vous devez vous lier à différentes énumérations en fonction de la situation. Il existe plusieurs façons de procéder, quelques exemples ci-dessous.
ObjectDataSource
Une manière déclarative de le faire avec ObjectDataSource. Tout d'abord, créez une classe BusinessObject qui renverra la liste pour lier la DropDownList à:
Ajoutez ensuite un balisage HTML à la page ASPX pour pointer vers cette classe BO:
Cette option ne nécessite aucun code derrière.
Code derrière DataBind
Pour réduire le HTML dans la page ASPX et effectuer la liaison dans Code Behind:
Quoi qu'il en soit, l'astuce est de laisser les méthodes de type Enum de GetValues, GetNames etc. travailler pour vous.
la source
Je ne sais pas comment le faire dans ASP.NET mais consultez cet article ... cela pourrait aider?
la source
Vous pouvez utiliser linq:
la source
la source
la source
Code générique utilisant la réponse six.
la source
Après avoir trouvé cette réponse, j'ai trouvé ce que je pense être une meilleure façon (au moins plus élégante) de faire cela, j'ai pensé que je reviendrais et la partagerais ici.
Page Load:
LoadValues:
Enregistrer les valeurs:
la source
C'est probablement une vieille question ... mais c'est comme ça que j'ai fait la mienne.
Modèle:
Ensuite, dans la vue: voici comment utiliser remplir la liste déroulante.
Cela devrait remplir tout dans votre liste d'énumération. J'espère que cela t'aides..
la source
[Display(Name = "Option number one")] Option1,
Ce n'est pas tout à fait ce que vous recherchez, mais cela pourrait vous aider:
http://blog.jeffhandley.com/archive/2008/01/27/enum-list-dropdown-control.aspx
la source
Pourquoi ne pas utiliser comme ça pour pouvoir passer chaque listControle:
Et l'utilisation est aussi simple que:la source
ASP.NET a depuis été mis à jour avec des fonctionnalités supplémentaires et vous pouvez désormais utiliser l'énumération intégrée pour la liste déroulante.
Si vous souhaitez créer une liaison sur Enum lui-même, utilisez ceci:
Si vous liez une instance de Response, utilisez ceci:
la source
C'est ma solution pour Order an Enum et DataBind (Text and Value) to Dropdown en utilisant LINQ
la source
Consultez mon article sur la création d'un assistant personnalisé "ASP.NET MVC - Création d'un assistant DropDownList pour les énumérations": http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc -creating-a-dropdownlist-helper-for-enums.aspx
la source
Si vous souhaitez avoir une description plus conviviale dans votre zone de liste déroulante (ou autre contrôle), vous pouvez utiliser l'attribut Description avec la fonction suivante:
Voici un exemple d'énumération avec les attributs Description appliqués:
Puis Bind pour contrôler comme ça ...
De cette façon, vous pouvez mettre le texte de votre choix dans la liste déroulante sans qu'il ait à ressembler à un nom de variable
la source
Vous pouvez également utiliser des méthodes d'extension. Pour ceux qui ne sont pas familiers avec les extensions, je suggère de vérifier la documentation VB et C # .
Extension VB:
Pour utiliser l'extension:
Extension C #:
Pour utiliser l'extension:
Si vous souhaitez définir l'élément sélectionné en même temps, remplacez
avec
En convertissant en System.Enum plutôt qu'en taille int et les problèmes de sortie sont évités. Par exemple, 0xFFFF0000 serait 4294901760 comme uint mais serait -65536 comme int.
TryCast et as System.Enum sont légèrement plus rapides que Convert.ChangeType (enumTypeValues [i], enumUnderType) .ToString () (12:13 dans mes tests de vitesse).
la source
Tutoriel asp.net et winforms avec combobox et liste déroulante: Comment utiliser Enum avec Combobox dans C # WinForms et Asp.Net
l'espoir aide
la source
La solution acceptée ne fonctionne pas, mais le code ci-dessous aidera les autres à rechercher la solution la plus courte.
la source
Vous pouvez le faire beaucoup plus court
la source