banyak orang telah menjawab pertanyaan tentang bagaimana mengikat enum ke kotak kombo di WinForms. Seperti ini:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
Tapi itu sangat tidak berguna tanpa bisa mengatur nilai sebenarnya untuk ditampilkan.
Saya telah mencoba:
comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null
Saya juga telah mencoba:
comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1
Apakah ada yang punya ide bagaimana melakukan ini?
SelectedValue
menyebabkanInvalidOperationException
saya. "Tidak dapat mengaturSelectedValue
dalamListControl
dengan kosongValueMember
."Jawaban:
Enum
Mengatur nilai drop-down darinya
Mendapatkan enum dari item yang dipilih
sumber
Untuk menyederhanakan:
Pertama Inisialisasi perintah ini: (mis. Setelah
InitalizeComponent()
)Untuk mengambil item yang dipilih di combobox:
Jika Anda ingin menyetel nilai untuk kotak kombo:
sumber
Kode
ok, masalahnya harus ada di DataBinding. Penugasan DataBinding terjadi setelah konstruktor, terutama saat combobox pertama kali ditampilkan. Cobalah untuk mengatur nilai pada event Load. Misalnya, tambahkan kode ini:
Dan periksa apakah itu berhasil.
sumber
Mencoba:
EDIT:
Ups, Anda sudah mencobanya. Namun, itu berhasil untuk saya ketika comboBox saya disetel menjadi DropDownList.
Berikut adalah kode lengkap saya yang berfungsi untuk saya (dengan DropDown dan DropDownList):
sumber
Katakanlah Anda memiliki enum berikut
Anda perlu memiliki struct untuk memetakan nilai-nilai tersebut ke string:
Sekarang kembalikan array objek dengan semua enum yang dipetakan ke string:
Dan gunakan yang berikut ini untuk mengisi kotak kombo Anda:
Buat fungsi untuk mengambil jenis enum kalau-kalau Anda ingin meneruskannya ke suatu fungsi
dan kemudian kamu akan baik-baik saja :)
sumber
Tuple
sebagai gantinya). Saya akan mengubah nilai enum dan deskripsinya menjadi properti, lalu menambahkannumberCB.DisplayProperty = "Caption"
; `dannumberCB.ValueProperty = "Num"
agar Anda dapat menggunakanSelectedValue
dan mengikatnya secara langsung.Coba ini:
StoreObject adalah contoh objek saya dengan properti StoreObjectMyEnumField untuk menyimpan nilai MyEnum.
sumber
sumber
Ini adalah solusi untuk memuat item enum di combobox:
Dan kemudian gunakan item enum sebagai teks:
sumber
Berdasarkan jawaban dari @Amir Shenouda, saya berakhir dengan ini:
Definisi Enum:
Mengatur nilai drop down darinya:
Mendapatkan enum dari item yang dipilih:
sumber
sumber
Sumber Penuh ... Mengikat enum ke Combobox
sumber
Saya menggunakan metode helper berikut, yang dapat Anda ikat ke daftar Anda.
sumber
Ubah enum menjadi daftar string dan tambahkan ini ke comboBox
Setel nilai yang ditampilkan menggunakan selectedItem
sumber
Tak satu pun dari ini berhasil untuk saya, tetapi ini berhasil (dan memiliki manfaat tambahan karena dapat memiliki deskripsi yang lebih baik untuk nama setiap enum). Saya tidak yakin apakah itu karena pembaruan .net atau bukan, tetapi terlepas dari itu, saya pikir ini adalah cara terbaik. Anda perlu menambahkan referensi ke:
menggunakan System.ComponentModel;
Kemudian ketika Anda ingin mengakses data gunakan dua baris ini:
sumber
Ini mungkin tidak akan pernah terlihat di antara semua tanggapan lainnya, tetapi ini adalah kode yang saya buat, ini memiliki manfaat menggunakan
DescriptionAttribute
jika ada, tetapi sebaliknya menggunakan nama nilai enum itu sendiri.Saya menggunakan kamus karena memiliki pola item kunci / nilai yang sudah jadi. SEBUAH
List<KeyValuePair<string,object>>
juga akan berfungsi dan tanpa hashing yang tidak perlu, tetapi kamus membuat kode yang lebih bersih.Saya mendapatkan anggota yang memiliki
MemberType
dariField
dan yang literal. Ini membuat urutan hanya anggota yang merupakan nilai enum. Ini kuat karena enum tidak dapat memiliki bidang lain.sumber
seharusnya bekerja dengan baik ... Bagaimana Anda bisa tahu bahwa
SelectedItem
itu nol?sumber
Anda dapat menggunakan fungsi "FindString ..":
sumber
Anda dapat menggunakan daftar nilai KeyValuePair sebagai sumber data untuk kotak kombo. Anda akan membutuhkan metode pembantu di mana Anda dapat menentukan jenis enum dan mengembalikan IEnumerable> di mana int adalah nilai enum dan string adalah nama dari nilai enum. Dalam kotak kombo Anda, setel properti DisplayMember ke 'Key' dan properti ValueMember ke 'Value'. Value dan Key adalah properti publik dari struktur KeyValuePair. Kemudian saat Anda menyetel properti SelectedItem ke nilai enum seperti yang Anda lakukan, properti itu akan berfungsi.
sumber
Saat ini saya menggunakan properti Item daripada DataSource, itu berarti saya harus memanggil Add untuk setiap nilai enum, tetapi ini adalah enum kecil, dan kode sementara tetap.
Kemudian saya bisa melakukan Convert.ToInt32 pada nilai dan mengaturnya dengan SelectedIndex.
Solusi sementara, tapi YAGNI untuk saat ini.
Bersorak untuk idenya, saya mungkin akan menggunakannya ketika saya melakukan versi yang tepat setelah mendapatkan umpan balik pelanggan.
sumber
Pertanyaan lama mungkin ada di sini tetapi saya memiliki masalah dan solusinya mudah dan sederhana, saya menemukan ini http://www.c-sharpcorner.com/UploadFile/mahesh/1220/
Itu menggunakan databining dan bekerja dengan baik jadi periksalah.
sumber
Kedua pekerjaan ini untuk saya, apakah Anda yakin tidak ada hal lain yang salah?
sumber
enum MyEnum { Something = 47 }
Metode umum untuk menyetel enum sebagai sumber data untuk drop-down
Tampilan akan menjadi nama. Nilai yang dipilih adalah Enum itu sendiri
sumber
Itu selalu menjadi masalah. jika Anda memiliki Enum Tersortir, seperti dari 0 hingga ...
Anda dapat mengikat nama ke kotak kombo dan daripada menggunakan
.SelectedValue
penggunaan properti.SelectedIndex
dan
sumber
Dalam Framework 4 Anda dapat menggunakan kode berikut:
Untuk mengikat enum MultiColumnMode ke kotak kombo misalnya:
dan untuk mendapatkan indeks terpilih:
catatan: Saya menggunakan combobox DevExpress dalam contoh ini, Anda dapat melakukan hal yang sama di Win Form Combobox
sumber
Sedikit terlambat ke pesta ini,
Metode SelectedValue.ToString () harus menarik DisplayedName. Namun artikel ini DataBinding Enum dan juga With Descriptions menunjukkan cara praktis untuk tidak hanya memilikinya tetapi sebaliknya Anda dapat menambahkan atribut deskripsi khusus ke enum dan menggunakannya untuk nilai yang ditampilkan jika Anda mau. Sangat sederhana dan mudah dan sekitar 15 baris kode (kecuali Anda menghitung tanda kurung kurawal) untuk semuanya.
Ini adalah kode yang cukup bagus dan Anda dapat menjadikannya sebagai metode ekstensi untuk mem-boot ...
sumber
hanya gunakan transmisi dengan cara ini:
sumber
Anda dapat menggunakan metode ekstensi
Cara menggunakan ... Deklarasikan enum
Metode ini menunjukkan deskripsi dalam item kotak kombo
sumber
Ini berhasil untuk saya:
sumber