2008-09-11 32 views
16

numaralı telefondaki açılır liste seçenekleri oluşturma Şu anda bir sınıfım var ve bu sınıfın bir koleksiyonunu oluşturmak için kolay bir GUI oluşturmaya çalışıyorum. Bu sınıfın özelliklerinin çoğu dizgidir. Ancak, kullanıcının ayarlamasını istediğim özelliklerden biri Enum'dur. Bu nedenle, kullanıcı arayüzünün, bu enum için bir açılır listeye sahip olmasını, kullanıcının geçerli olmayan bir değer girmesini kısıtlamasını istiyorum. Şu anda, bir DataTable'a ekleyerek ve DataGridView'ımın DataSource'ını tabloya ayarlayarak ilk nesne listesini alıyorum. Güzel çalışır, hatta bir Boolean özelliği için bir onay kutusu sütunu oluşturur. Ancak, enum için bir sütun açılır listeye nasıl yapılır bilmiyorum. C# ve .NET 2.0 kullanıyorum.Bir DataGridView

Ayrıca, DataGridView öğesinin DataSource'ımı nesneler listeme atama girişiminde bulundum, ancak bunu yaptığımda, enum ile yardımcı olmaz ve DataGridView'da yeni satırlar oluşturamıyorum, ancak Veri Kaynağım olarak DataTable kullanmaya kesinlikle bağlı değilim, sadece yarı-çalışma seçeneğim buydu.

cevap

34

bir DataGridView sütun ile çalışacak ama Comboboxlarda ile çalışıp çalışmadığını bilmiyorum:

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum)); 

ve:

MyEnum value = (MyEnum)comboBox1.SelectedValue; 

GÜNCELLEME: Bu sadece hatırlamak çok DataGridView sütunları ile çalışır Değer tipini ayarlayın.

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 
col.Name = "My Enum Column"; 
col.DataSource = Enum.GetValues(typeof(MyEnum)); 
col.ValueType = typeof(MyEnum); 
dataGridView1.Columns.Add(col); 
+0

comboBox1'e nereden/nasıl erişilir? – ssal

3

Veya, numaralayıcı değerlerinden bazılarını filtreleme yapmak gerekiyorsa, Enum.GetValues ​​(typeof (EnumeratorName)) aracılığıyla döngü ve kullanmakta istediğiniz olanları ekleyebilirsiniz:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue) 

Farklı Bir DataTable kullanmak yerine bir DataTridView DataSource nesnesini, BindingSource nesnesinin DataSource'ı, bir IList'i yapıcıya geçirerek doldurduğunuz bir BindingList < Sınıfınız > olarak ayarlayarak ayarlayabilirsiniz.

Aslında, bir tanesinin bulunmadığı durumlarda (bu bir veritabanı çağrısından döndürülmüşse) DataTable kullanmak tercih edilirse, kimseyle ilgilenmek isterim.