2009-03-01 15 views
85

मैं कक्षा वस्तुओं की एक सूची के लिए एक बाध्यकारी स्रोत कनेक्ट करना चाहते हैं और फिर एक कॉम्बो बॉक्स के लिए मूल्य वस्तुओं किसी को भी यह कैसेएक combobox के लिए एक सूची कैसे बांधें? (Winforms)

public class Country 
    { 
     public string Name { get; set; } 
     public IList<City> Cities { get; set; } 

     public Country() 
     { 
      Cities = new List<City>(); 
     } 
    } 

मेरी कक्षा है ऐसा करने के लिए सुझाव है कि कर सकते हैं और मैं इसके नाम बाध्य करने के लिए चाहते हैं

yourControl.DataSource = countryInstance.Cities; 

और अगर आप WebForms का उपयोग कर रहे आप इस लाइन जोड़ने की आवश्यकता होगी: एक बाध्यकारी स्रोत जो तब इस तरह

+0

Winforms क्या मैं चाहता हूँ मुझे देश वस्तु बाकी के नाम क्षेत्र में डेटा मानों कनेक्ट मैं यह पता लगाने में सहायता मिलेगी है – Mobin

उत्तर

129

आप एक combobox की बात कर रहे हैं, मैं यह सोचते करती हूं कि आप

public class Country 
{ 
    public string Name { get; set; } 
    public IList<City> Cities { get; set; } 
    public Country(string _name) 
    { 
     Cities = new List<City>(); 
     Name = _name; 
    } 
} 



(यदि ऐसा है तो, एक BindingList का उपयोग कर देखो) 2 तरह डेटा बाइंडिंग का उपयोग नहीं करना चाहते हैं
List<Country> countries = new List<Country> { new Country("UK"), 
            new Country("Australia"), 
            new Country("France") }; 

bindingSource1.DataSource = countries; 

comboBox1.DataSource = bindingSource1.DataSource; 

comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "Name"; 
+3

धन्यवाद का उपयोग कर रहा हूं, लेकिन यहां कुछ समस्या है, एप्लिकेशन – Mobin

+1

चलाते समय कंबोबॉक्स में नाम दिखाई नहीं दे रहे हैं, मैंने अभी उसी कोड के साथ एक Winforms ऐप बनाया है और यह ठीक काम करता है। –

+21

@Mobin यदि नाम दिखाई नहीं दे रहे हैं तो सुनिश्चित करें कि आप डिस्प्लेमेम्बर को कक्षा पर किसी संपत्ति पर बाध्य कर रहे हैं, न कि सार्वजनिक क्षेत्र। यदि आप कक्षा 'सार्वजनिक स्ट्रिंग नाम {प्राप्त करें; सेट; } 'यह काम करेगा लेकिन यदि यह' सार्वजनिक स्ट्रिंग नाम 'का उपयोग करता है, तो यह मान तक पहुंचने में सक्षम नहीं होगा और इसके बजाय कॉम्बो बॉक्स में प्रत्येक पंक्ति के लिए ऑब्जेक्ट प्रकार प्रदर्शित करेगा। –

0

कोशिश कुछ एक combobox के साथ जुड़ा हो सकता है के लिए क्षेत्र

yourControl.DataBind(); 
+1

जो बाइंडिंगसोर्स का उपयोग नहीं करता है ... –

+0

क्या मैं पूछ रहा था ??? – Mobin

+1

साथ ही comboBox1.DataBind(); फ़ंक्शन मैं इसे समाधान में नहीं देखता मैं Winforms – Mobin

20

एक बैकग्राउंडर के लिए, वहाँ 2 तरीके कोई ComboBox/ListBox

1 उपयोग करने के लिए) जोड़ें देश Obj हैं आइटम संपत्ति के लिए ects और चयनित देश के रूप में एक देश को पुनर्प्राप्त करें। इसका उपयोग करने के लिए आपको देश के ToString को ओवरराइड करना चाहिए।

2) का प्रयोग करें DataBinding, एक IList के लिए डेटा स्रोत (सूची <>) सेट है और उपयोग DisplayMember, ValueMember और SelectedValue

2 के लिए) आप पहली बार

// not tested, schematic: 
List<Country> countries = ...; 
...; // fill 

comboBox1.DataSource = countries; 
comboBox1.DisplayMember="Name"; 
comboBox1.ValueMember="Cities"; 

देशों की एक सूची की आवश्यकता होगी और तो SelectionChanged में,

if (comboBox1.Selecteditem != null) 
{ 
    comboBox2.DataSource=comboBox1.SelectedValue; 

} 
+2

धन्यवाद लेकिन यहां कुछ समस्या है, एप्लिकेशन – Mobin

0
public class Country 
    { 
     public string Name { get; set; } 
     public IList<City> Cities { get; set; } 

     public Country() 
     { 
      Cities = new List<City>(); 
     } 
    } 

    public class City { public string Name { get; set; } } 

List<Country> Countries = new List<Country> 
     { 
      new Country 
      { 
       Name = "Germany", 
       Cities = 
       { 
        new City {Name = "Berlin"}, 
        new City {Name = "Hamburg"} 
       } 
      }, 
      new Country 
      { 
       Name = "England", 
       Cities = 
       { 
        new City {Name = "London"}, 
        new City {Name = "Birmingham"} 
       } 
      } 
     }; 

     bindingSource1.DataSource = Countries; 
     member_CountryComboBox.DataSource = bindingSource1.DataSource; 
     member_CountryComboBox.DisplayMember = "Name"; 
     member_CountryComboBox.ValueMember = "Name"; 

यह वह जगह है कोड मैं अब

+1

चलाते समय कंबोबॉक्स में नाम दिखाई नहीं दे रहे हैं: कुछ बाध्यकारी स्रोत एक प्रकार का लिंक-थ्रू स्रोत है, आप वास्तव में इसका उपयोग नहीं कर रहे हैं, शायद ठीक है। लेकिन यदि आप अन्य सामानों को जोड़ने के लिए इसका उपयोग करना चाहते हैं, तो सदस्य_cbx = bindingSource1 का उपयोग करें; –

16
public MainWindow(){ 
    List<person> personList = new List<person>(); 

    personList.Add(new person { name = "rob", age = 32 }); 
    personList.Add(new person { name = "annie", age = 24 }); 
    personList.Add(new person { name = "paul", age = 19 }); 

    comboBox1.DataSource = personList; 
    comboBox1.DisplayMember = "name"; 

    comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged); 
} 


void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    person selectedPerson = comboBox1.SelectedItem as person; 
    messageBox.Show(selectedPerson.name, "caption goes here"); 
} 

बूम का उपयोग कर रहा हूं।

+0

चयन परिवर्तन को छोड़कर यह काम करता है .NET 4.0 में नियंत्रण पर प्रतीत नहीं होता है। मैंने इसे बदल दिया चयन चयन के साथ और सब ठीक है। –

+0

मेरे लिए, यह उत्कृष्ट यार है ... :-) –

-2

आप एक ToolStripComboBox उपयोग कर रहे हैं कोई (.NET 4.0) डेटा स्रोत उजागर होती है:

List<string> someList = new List<string>(); 
someList.Add("value"); 
someList.Add("value"); 
someList.Add("value"); 

toolStripComboBox1.Items.AddRange(someList.ToArray()); 
+3

उस स्थिति में आपको 'ToolstripComboBox.ComboBox.DataSource' का उपयोग करने की आवश्यकता है। ऐसा लगता है कि 'टूलस्ट्रिपकम्बोबॉक्स' सामान्य 'कॉम्बोबॉक्स' के लिए एक रैपर है। –

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