2016-03-11 13 views
7

मैं एक गणन के साथ एक combobox पॉप्युलेट करने के लिए एक आसान तरीका है कि वहाँ Stackoverflow के माध्यम से देखा है:बाइंड Combobox साथ Enum विवरण

cbTipos.DataSource = Enum.GetValues(typeof(TiposTrabajo)); 

मेरे मामले में मैं अपने enumerations के लिए कुछ विवरण को परिभाषित किया है:

public enum TiposTrabajo 
    {     
     [Description("Programacion Otros")] 
     ProgramacionOtros = 1,   
     Especificaciones = 2, 
     [Description("Pruebas Taller")] 
     PruebasTaller = 3, 
     [Description("Puesta En Marcha")] 
     PuestaEnMarcha = 4, 
     [Description("Programación Control")] 
     ProgramacionControl = 5} 

यह बहुत अच्छी तरह से काम कर रहा है, लेकिन यह मूल्य दिखाता है, विवरण नहीं मेरी समस्या यह है कि मैं कम्बोबॉक्स में गणना के विवरण में दिखाना चाहता हूं जब उसके पास वर्णन या मूल्य नहीं होता है मूल्य है यदि आवश्यक हो तो मैं उन मानों के लिए एक विवरण जोड़ सकता हूं जिनमें वर्णन नहीं है। अग्रिम में Thx।

उत्तर

13

इस प्रयास करें:

cbTipos.DisplayMember = "Description"; 
cbTipos.ValueMember = "Value"; 
cbTipos.DataSource = Enum.GetValues(typeof(TiposTrabajo)) 
    .Cast<Enum>() 
    .Select(value => new 
    { 
     (Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute).Description, 
     value 
    }) 
    .OrderBy(item => item.value) 
    .ToList(); 

आदेश में इस के लिए काम करने के लिए, सभी मूल्यों एक वर्ण होना चाहिए या आप एक NullReference अपवाद मिल जाएगा। उम्मीद है की वो मदद करदे।

+0

बिल्कुल सही, आपको बहुत धन्यवाद। – Dinalan

+0

यह बहुत उपयोगी है। लेकिन आप कॉम्बो बॉक्स को किसी विशेष आइटम पर कैसे प्रीसेट करते हैं? – user2430797

0

यहां मैं यही हुआ क्योंकि मुझे डिफ़ॉल्ट भी सेट करने की आवश्यकता थी।

public static void BindEnumToCombobox<T>(this ComboBox comboBox, T defaultSelection) 
{ 
    var list = Enum.GetValues(typeof(T)) 
     .Cast<T>() 
     .Select(value => new 
     { 
      (Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute).Description, 
      value 
     }) 
     .OrderBy(item => item.value.ToString()) 
     .ToList(); 

    comboBox.DataSource = list; 
    comboBox.DisplayMember = "Description"; 
    comboBox.ValueMember = "value"; 

    foreach (var opts in list) 
    { 
     if (opts.value.ToString() == defaultSelection.ToString()) 
     { 
      comboBox.SelectedItem = opts; 
     } 
    } 
} 

उपयोग:

cmbFileType.BindEnumToCombobox<FileType>(FileType.Table); 

कहाँ cmbFileType ComboBox और "फ़ाइल-प्रकार" है enum है।

संबंधित मुद्दे