2012-01-04 23 views
5

मैं एक छोटा डेस्कटॉप ऐप विकसित कर रहा हूं, और मेरे फॉर्म पर कई ड्रॉप-डाउन सूचियां (combobox-es) हैं। मैं स्ट्रिंग्स की एक सूची तैयार करता हूं, जिसका उपयोग उन सभी के लिए डेटा स्रोत के रूप में किया जाएगा। यहाँ मेरी Form.cs वर्ग से उदाहरण है:विंडोज फॉर्म का अजीब व्यवहार combobox नियंत्रण

List<string> datasource = new List<string>(); 
datasource.Add("string 1"); 
datasource.Add("string 2"); 

तब मैं कई comboboxes में डेटा स्रोत के रूप में यह सूची समूह:

cmbDataType1.DataSource = datasource; 
cmbDataType2.DataSource = datasource; 

यह सब एक ही विधि है, जो फार्म से कहा जाता है में क्या होता है निर्माता। यहां अजीब हिस्सा है: जब मैं उनमें से किसी एक में चयनित मान बदलता हूं, तो वही मान दूसरे में सेट किया जाएगा। SelectedIndexChange ईवेंट सेट नहीं हैं। मैंने कहीं गड़बड़ कर ली है, लेकिन मैं अपनी उंगली नहीं डाल सकता ...

+1

यहाँ [एक ब्लॉग पोस्ट के लिए एक लिंक] है (http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/: डेटा स्रोत अगली बार बंधन से पहले नियंत्रण के लिए बाध्यकारी-बहु-comboboxes-to-the-same-datasource.aspx) जो इस बारे में कुछ बात करता है। यह vb.net के बारे में है, लेकिन व्यवहार का विवरण वही तरीका होना चाहिए। –

+0

यह वास्तव में कुछ चीजों को स्पष्ट करता है, धन्यवाद आदमी। –

उत्तर

10

जो व्यवहार आप देखते हैं वह डिज़ाइन द्वारा है। जब आप एक ही ऑब्जेक्ट को एकाधिक नियंत्रणों के लिए डेटा स्रोत के रूप में बांधते हैं, तो सभी नियंत्रण समान बाध्यकारी स्रोत साझा करते हैं।

आप स्पष्ट रूप से, प्रत्येक नियंत्रण के लिए एक नया बंधन स्रोत असाइन करते हैं एक ही डेटा स्रोत का उपयोग करते हुए भी, सभी नियंत्रण अनबाउंड हो जाएगा और एक दूसरे से स्वतंत्र कार्य करेगा:

cmbDataType1.DataSource = new BindingSource(datasource, ""); 
cmbDataType2.DataSource = new BindingSource(datasource, ""); 
+0

महान काम करता है, धन्यवाद। –

3

चूंकि आप उसी सटीक datasource पर बाध्यकारी हैं, जो अपेक्षित व्यवहार है। यदि आप चयनित नहीं बदलना चाहते हैं तो आप बाध्यकारी को OneWay बाध्यकारी या विभिन्न ऑब्जेक्ट्स का उपयोग करना चाहेंगे।

+0

हालांकि यह अभी भी उत्सुक है। डेटा स्रोत तारों की एक सूची है। Combobox 2 कैसे जानता है कि चयनित इंडेक्स combobox 1 में बदल गया है? सूची में उस जानकारी को स्टोर करने का कोई तरीका नहीं है। –

+0

यह डेटा स्रोत के लिए बाध्यकारी का जादू है। Combobox1 में इंडेक्स को बदलना डेटासॉर को अपने आंतरिक सूचक को स्थानांतरित करने के लिए कहा गया है जो बदले में combobox2 में परिवर्तन को ट्रिगर करता है। –

+0

मैं बस अपनी जिज्ञासा के लिए कार्यान्वयन को कसरत करने की कोशिश कर रहा हूं ... इसलिए मुझे लगता है कि वे डेटा स्रोत संरचना में सूची को लपेटने वाले बुकिपिंग डेटा के साथ सूची को "वर्तमान आइटम" जैसी चीजों को लपेटते हैं। दोनों comboboxes एक ही रैपर का संदर्भ कैसे होगा? मुझे लगता है कि वे दोनों एक बनाते हैं जब उनके संबंधित 'डेटासोर्स' गुण सेट किए गए थे, जिसका अर्थ है कि संचार काम नहीं करेगा। दिलचस्प ... –

4

आप एक नया BindingContext स्थापित करना चाहिए

cmbDataType1.BindingContext = new BindingContext(); 
cmbDataType1.DataSource = datasource; 

cmbDataType2.BindingContext = new BindingContext(); 
cmbDataType2.DataSource = datasource; 
+0

त्वरित उत्तर के लिए धन्यवाद, यह एक आकर्षण की तरह काम करता है! : डी –

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