I prawdopodobnie nie wiążą dane, jak to jest enum, i to nie zmieni się po czasie kompilacji (chyba, że mam jeden z tych Stoopid momentach).
Lepiej po prostu iterować przez wyliczenie:
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
Lub to samo w 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);
}
Użyj następującej klasy narzędziowej,
Enumeration
aby uzyskaćIDictionary<int,string>
(para wartość wyliczenia i nazwa) z wyliczenia ; następnie powiąż IDictionary z możliwą do powiązania kontrolką .Przykład: użycie klasy narzędziowej do powiązania danych wyliczenia z kontrolką
źródło
Używam tego dla ASP.NET MVC :
źródło
Moja wersja jest tylko skompresowaną formą powyższego:
źródło
Każdy typ wyliczenia pochodzi od System.Enum. Istnieją dwie statyczne metody, które pomagają powiązać dane z kontrolką listy rozwijanej (i pobrać wartość). Są to Enum.GetNames i Enum.Parse. Używając GetNames, możesz powiązać się z kontrolką listy rozwijanej w następujący sposób:
Teraz, jeśli chcesz, aby wartość Enum z powrotem przy wyborze ...
źródło
Po przeczytaniu wszystkich postów wymyśliłem kompleksowe rozwiązanie wspierające wyświetlanie opisu wyliczenia na liście rozwijanej, a także wybieranie odpowiedniej wartości z modelu w menu rozwijanym podczas wyświetlania w trybie edycji:
enum:
klasa rozszerzenia enum:
Klasa modelu:
i Wyświetl:
a jeśli używasz tego menu bez powiązania z modelem, możesz użyć tego zamiast tego:
W ten sposób możesz oczekiwać, że na liście rozwijanej zostanie wyświetlony opis zamiast wartości wyliczeniowych. Również jeśli chodzi o Edycję, Twój model zostanie zaktualizowany poprzez rozwijanie wybranej wartości po opublikowaniu strony.
źródło
Jak już powiedzieli inni - nie należy wiązać danych z wyliczeniem, chyba że w zależności od sytuacji konieczne jest powiązanie z różnymi wyliczeniami. Można to zrobić na kilka sposobów, kilka przykładów poniżej.
ObjectDataSource
Deklaratywny sposób na zrobienie tego z ObjectDataSource. Najpierw utwórz klasę BusinessObject, która zwróci List w celu powiązania DropDownList z:
Następnie dodaj trochę znaczników HTML do strony ASPX, aby wskazać tę klasę BO:
Ta opcja nie wymaga żadnego kodu.
Code Behind DataBind
Aby zminimalizować kod HTML na stronie ASPX i wykonać powiązanie w kodzie za:
W każdym razie, sztuczka polega na tym, aby metody typu Enum GetValues, GetNames itp. Działały za Ciebie.
źródło
Nie jestem pewien, jak to zrobić w ASP.NET, ale sprawdź ten post ... to może pomóc?
źródło
Możesz użyć linq:
źródło
źródło
źródło
Kod ogólny wykorzystujący odpowiedź szóstą.
źródło
Po znalezieniu tej odpowiedzi wymyśliłem, co uważam za lepszy (przynajmniej bardziej elegancki) sposób na zrobienie tego, pomyślałem, że wrócę i podzielę się tym tutaj.
Ładowanie strony:
LoadValues:
SaveValues:
źródło
To chyba stare pytanie… ale tak zrobiłem swoje.
Model:
Następnie w widoku: oto jak używać wypełnij listę rozwijaną.
Powinno to wypełnić wszystko na liście wyliczeń. Mam nadzieję że to pomoże..
źródło
[Display(Name = "Option number one")] Option1,
Nie do końca tego szukasz, ale może pomóc:
http://blog.jeffhandley.com/archive/2008/01/27/enum-list-dropdown-control.aspx
źródło
Dlaczego nie użyć w ten sposób, aby móc przekazać każdą listControle:
Używanie jest tak proste, jak:źródło
ASP.NET został od tego czasu zaktualizowany o więcej funkcji i możesz teraz używać wbudowanego wyliczenia do rozwijania.
Jeśli chcesz powiązać sam Enum, użyj tego:
Jeśli wiążesz wystąpienie Response, użyj tego:
źródło
To jest moje rozwiązanie do zamawiania wyliczenia i wiązania danych (tekst i wartość) do listy rozwijanej przy użyciu LINQ
źródło
Sprawdź mój post dotyczący tworzenia niestandardowego pomocnika „ASP.NET MVC - tworzenie pomocnika DropDownList dla wyliczeń”: http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc -creating-a-dropdownlist-helper-for-enums.aspx
źródło
Jeśli chciałbyś mieć bardziej przyjazny dla użytkownika opis w swoim polu kombi (lub innej kontrolce), możesz użyć atrybutu Opis z następującą funkcją:
Oto przykład wyliczenia z zastosowanymi atrybutami opisu:
Następnie Bind, aby kontrolować w ten sposób ...
W ten sposób możesz umieścić dowolny tekst na liście rozwijanej bez konieczności wyglądania jak nazwa zmiennej
źródło
Możesz także użyć metod rozszerzających. Dla tych, którzy nie są zaznajomieni z rozszerzeniami, radzę sprawdzić dokumentację VB i C # .
Rozszerzenie VB:
Aby skorzystać z rozszerzenia:
Rozszerzenie C #:
Aby skorzystać z rozszerzenia:
Jeśli chcesz ustawić wybrany element w tym samym czasie, zamień
z
Konwersja do System.Enum pozwala uniknąć problemów z rozmiarem int i wynikami. Na przykład 0xFFFF0000 będzie równe 4294901760 jako uint, ale będzie to -65536 jako int.
TryCast i as System.Enum są nieco szybsze niż Convert.ChangeType (enumTypeValues [i], enumUnderType) .ToString () (12:13 w moich testach szybkości).
źródło
Samouczek asp.net i WinForms z ComboBox i rozwijaną listą: Jak używać Enum z Combobox w C # WinForms i Asp.Net
nadzieja pomaga
źródło
Przyjęte rozwiązanie nie działa, ale poniższy kod pomoże innym szukającym najkrótszego rozwiązania.
źródło
Możesz to zrobić znacznie krócej
źródło