2011-03-29 6 views
5


मैं वर्ग के कई वस्तुओं का कारण बनता हैComboBox DataBinding ArgumentException

class Cl 
{ 
    public Person Person { get; set; } 
} 

और मैं बता गया करने के लिए Cl.Person बाध्य करने के लिए चाहते हैं। जब मैं इस तरह यह करने के लिए प्रयास करें:

Cl cl = new cl(); 
comboBox.DataSource = new List<Person> {new Person{Name = "1"}, new Person{Name = "2"}}; 
comboBox.DataBindings.Add("Item", cl, "Person"); 

मैं एक ArgumentException मिलता है। सही प्रोग्राम व्यवहार प्राप्त करने के लिए मुझे अपने बाध्यकारी को कैसे संशोधित करना चाहिए?
अग्रिम धन्यवाद!

उत्तर

7

"SelectedItem" से आबद्ध करें:

 var persons = new List<Person> { new Person() { Name = "John Doe"}, new Person() { Name = "Scott Tiger" }}; 
     comboBox1.DisplayMember = "Name"; 
     comboBox1.DataSource = persons; 
     comboBox1.DataBindings.Add("SelectedItem", cl, "Person"); 
1

comboBox.DataBindings.Add("Text", cl, "Person.Name"); 
बजाय

प्रयास करें आप बता गया उस पर जो संपत्ति आप के लिए बाध्य करना चाहते हैं बताने के लिए अपने ऑब्जेक्ट पर जो संपत्ति के लिए (यह पाठ संपत्ति, मेरे उदाहरण में जो नाम दिखाएगा की जरूरत है चयनित व्यक्ति की संपत्ति)।

* संपादित करें: * वास्तव में स्क्रैप कि, मैं उलझन में हो रही किया गया था। आप लगभग यह केवल बता गया नहीं करता था, टी एक संपत्ति बुलाया आइटम है, तो आप SelectedItem चाहते बजाय, इस तरह:

Cl cl = new cl(); 
comboBox.DataSource = new List<Person> {new Person{Name = "1"}, new Person{Name = "2"}}; 
comboBox.DataBindings.Add("SelectedItem", cl, "Person"); 
+0

मैं चाहता हूं कि combobox केवल उनके नामों के बजाय व्यक्तियों को शामिल करे। – StuffHappens

+0

@StuffHappens: हाँ वे वैसे भी अनदेखा करेंगे और मेरे अपडेट देखेंगे – w69rdy

3

सरल डेटा बाइंडिंग के लिए, यह

cl.Person = new Person{ Name="Harold" }; 
comboBox.DataBindings.Add("Text",cl.Person, "Name"); 

काम करेंगे लेकिन मुझे नहीं पता लगता है कि आप यही चाहते हैं। मुझे लगता है कि आप वस्तुओं की एक सूची से जुड़ना चाहते हैं, फिर एक का चयन करें।तो

comboBox.DataSource = new List<Person> {new Person{Name = "1"}, new Person{Name = "2"}}; 
comboBox.DisplayMember = "Name"; 

अपने व्यक्ति वर्ग परंतु बराबर() ऐसा है कि, कहते हैं, एक व्यक्ति दूसरे के बराबर होती है अगर वे एक ही नाम है ओवरराइड करता है,: मदों की एक सूची के लिए बाध्य और नाम संपत्ति दिखाने के लिए, इस कोशिश SelectedItem संपत्ति के लिए बाध्य तो की तरह काम करेगा:

Cl cl = new Cl {Person = new Person {Name="2" }}; 
comboBox.DataBindings.Add("SelectedItem", cl, "Person"); 

आप बराबर(), ओवरराइड नहीं कर सकते हैं तो आप सिर्फ यकीन है कि आप डेटा स्रोत सूची में से एक व्यक्ति उदाहरण को संदर्भित कर रहे हैं बनाने के लिए है, तो नीचे दिए गए कोड आपके विशिष्ट कोड के लिए काम करता है:

Cl cl = new Cl(); 
cl.Person = ((List<Person>)comboBox1.DataSource)[1]; 
comboBox.DataBindings.Add("SelectedItem", cl, "Person"); 
,210
0

आप Enums उपयोग कर रहे हैं हो सकता है यू enums के एक वर्ग है तो आप इस

  1. की तरह एक कॉम्बो बॉक्स कॉम्बो बॉक्स निर्दिष्ट कर सकते हैं datasourse जैसे

    comboBoxname.DataSource = Enum.GetValues(typeof(your enum)); 
    
  2. अब combox बॉक्स बाँध के बाद से हम डेटा स्रोत

    देता है
    comboBoxname.DataBindings.Add("SelectedItem", 
               object, 
               "field of type enum in the object");