wiele osób odpowiedziało na pytanie, jak powiązać wyliczenie z polem kombi w WinForms. To jest tak:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
Ale to jest całkiem bezużyteczne bez możliwości ustawienia rzeczywistej wartości do wyświetlenia.
Próbowałem:
comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null
Próbowałem też:
comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1
Czy ktoś ma jakieś pomysły jak to zrobić?
SelectedValue
powodujeInvalidOperationException
dla mnie. „Nie można ustawićSelectedValue
w aListControl
z pustymValueMember
”.Odpowiedzi:
Enum
Ustawienie z niego rozwijanych wartości
Pobieranie wyliczenia z wybranego elementu
źródło
Ułatwiać:
Najpierw zainicjuj to polecenie: (np. Po
InitalizeComponent()
)Aby odzyskać wybrany przedmiot w Combobox:
Jeśli chcesz ustawić wartość dla combobox:
źródło
Kod
jest w porządku, problem musi znajdować się w wiązaniu danych. Przypisania DataBinding występują po konstruktorze, głównie przy pierwszym wyświetleniu pola Combo. Spróbuj ustawić wartość w zdarzeniu Load. Na przykład dodaj ten kod:
I sprawdź, czy działa.
źródło
Próbować:
EDYCJE:
Ups, już tego próbowałeś. Jednak zadziałało to dla mnie, gdy mój comboBox był ustawiony jako DropDownList.
Oto mój pełny kod, który działa dla mnie (zarówno z DropDown, jak i DropDownList):
źródło
Powiedzmy, że masz następujące wyliczenie
Musisz mieć strukturę, aby zamapować te wartości na łańcuch:
Teraz zwróć tablicę obiektów ze wszystkimi wyliczeniami odwzorowanymi na łańcuch:
I użyj następujących, aby wypełnić swoje pole kombi:
Utwórz funkcję, aby pobrać typ wyliczenia na wypadek, gdybyś chciał przekazać go do funkcji
a potem powinno być dobrze :)
źródło
Tuple
zamiast tego). Zamieniłbym zarówno wartość wyliczenia, jak i opis na właściwości, a następnie dodałbymnumberCB.DisplayProperty = "Caption"
; `numberCB.ValueProperty = "Num"
, aby można było użyć ichSelectedValue
bezpośrednio i powiązać z nim.Spróbuj tego:
StoreObject to przykład mojego obiektu z właściwością StoreObjectMyEnumField dla wartości magazynu MyEnum.
źródło
źródło
to jest rozwiązanie do załadowania elementu wyliczenia w combobox:
Następnie użyj wyliczenia jako tekstu:
źródło
Na podstawie odpowiedzi od @Amir Shenouda kończy się na tym:
Definicja Enuma:
Ustawianie z niego rozwijanych wartości:
Pobieranie wyliczenia z wybranego elementu:
źródło
źródło
Pełne źródło ... Powiązanie wyliczenia z Combobox
źródło
Używam następującej metody pomocniczej, którą możesz powiązać ze swoją listą.
źródło
Przekonwertuj wyliczenie na listę ciągów i dodaj ją do comboBox
Ustaw wyświetlaną wartość za pomocą selectedItem
źródło
Żadne z nich nie zadziałało dla mnie, ale zadziałało (i miało dodatkową zaletę w postaci lepszego opisu nazwy każdego wyliczenia). Nie jestem pewien, czy jest to spowodowane aktualizacjami .net, czy nie, ale niezależnie od tego uważam, że to najlepszy sposób. Musisz dodać odniesienie do:
using System.ComponentModel;
Następnie, jeśli chcesz uzyskać dostęp do danych, użyj tych dwóch linii:
źródło
Prawdopodobnie nigdy nie będzie to widoczne wśród wszystkich innych odpowiedzi, ale to jest kod, który wymyśliłem, ma tę zaletę, że używa się,
DescriptionAttribute
jeśli istnieje, ale w przeciwnym razie używa się nazwy samej wartości wyliczenia.Użyłem słownika, ponieważ ma on gotowy wzorzec pozycji klucz / wartość. A
List<KeyValuePair<string,object>>
działałby również bez niepotrzebnego haszowania, ale słownik zapewnia czystszy kod.Mam członków, którzy mają wartość „
MemberType
of”Field
i „dosłownie”. Spowoduje to utworzenie sekwencji tylko członków, które są wartościami wyliczeniowymi. Jest to niezawodne, ponieważ wyliczenie nie może mieć innych pól.źródło
powinno działać dobrze ... Jak możesz stwierdzić, że
SelectedItem
to jest zerowe?źródło
Możesz użyć funkcji „FindString ..”:
źródło
Możesz użyć listy wartości KeyValuePair jako źródła danych dla combobox. Będziesz potrzebować metody pomocniczej, w której możesz określić typ wyliczenia i zwraca IEnumerable>, gdzie int jest wartością wyliczenia, a string to nazwa wartości wyliczenia. W polu combobox ustaw właściwość DisplayMember na „Klucz”, a właściwość ValueMember na „Wartość”. Wartość i klucz to właściwości publiczne struktury KeyValuePair. Następnie, gdy ustawisz właściwość SelectedItem na wartość wyliczenia, tak jak robisz, powinno to działać.
źródło
W tej chwili używam właściwości Items, a nie DataSource, oznacza to, że muszę wywołać Add dla każdej wartości wyliczenia, ale i tak jest to małe wyliczenie i jego tymczasowy kod.
Następnie mogę po prostu wykonać Convert.ToInt32 na wartości i ustawić ją za pomocą SelectedIndex.
Rozwiązanie tymczasowe, ale na razie YAGNI.
Pozdrawiam pomysły, prawdopodobnie skorzystam z nich, kiedy zrobię odpowiednią wersję po otrzymaniu serii opinii klientów.
źródło
Być może stare pytanie, ale miałem problem, a rozwiązanie było łatwe i proste, znalazłem to http://www.c-sharpcorner.com/UploadFile/mahesh/1220/
Korzysta z bazy danych i działa ładnie, więc sprawdź to.
źródło
Obie te metody działają dla mnie. Jesteś pewien, że coś innego jest nie tak?
źródło
enum MyEnum { Something = 47 }
Ogólna metoda ustawiania wyliczenia jako źródła danych dla listy rozwijanej
Wyświetlana byłaby nazwa. Wybraną wartością będzie samo Enum
źródło
To zawsze był problem. jeśli masz Sorted Enum, np. od 0 do ...
możesz powiązać nazwy z combobox i zamiast używać
.SelectedValue
właściwości.SelectedIndex
i
źródło
W Framework 4 możesz użyć następującego kodu:
Aby powiązać wyliczenie MultiColumnMode z combobox, na przykład:
i aby uzyskać wybrany indeks:
uwaga: w tym przykładzie używam DevExpress ComboBox, możesz zrobić to samo w Win Form Combobox
źródło
Trochę za późno na tę imprezę,
Metoda SelectedValue.ToString () powinna pobierać DisplayedName. Jednak ten artykuł DataBinding Enum, a także With Descriptions pokazuje wygodny sposób, aby nie tylko to mieć, ale zamiast tego możesz dodać niestandardowy atrybut opisu do wyliczenia i użyć go dla wyświetlanej wartości, jeśli wolisz. Bardzo prosty i łatwy, zawiera około 15 linii kodu (chyba że policzysz nawiasy klamrowe) na wszystko.
Jest to całkiem sprytny kod i możesz uczynić go metodą rozszerzenia do uruchamiania ...
źródło
używaj odlewania tylko w ten sposób:
źródło
Możesz użyć metody rozszerzenia
Jak używać ... Zadeklaruj wyliczenie
Ta metoda wyświetla opis w elementach listy rozwijanej
źródło
To zadziałało dla mnie:
źródło