2011-02-01 21 views
11

क्या मैं पूछ सकता हूं कि दोनों comboboxes एक दूसरे को क्यों ट्रिगर करते हैं कि दोनों के समान मूल्य हैं? क्या मैं एक ही सूची साझा नहीं कर सकता हूं और अलग-अलग चयनित पाठ के साथ 2 comboboxes हो सकता है?साझा करें कॉम्बोबॉक्स डेटासोर्स

private void Form1_Load(object sender, EventArgs e) 
    { 
     BindingList<string> list = new BindingList<string>(); 
     list.Add("A"); 
     list.Add("B"); 
     list.Add("C"); 
     list.Add("D"); 

     bind(cbo1, list); 
     bind(cbo2, list); 
    } 

    private void bind(ComboBox combobox, BindingList<string> list) 
    { 
     // commented lines are in actual code, 
     // but appears unimportant in this question 
     //combobox.DropDownStyle = ComboBoxStyle.DropDown; 
     //combobox.AutoCompleteSource = AutoCompleteSource.ListItems; 
     //combobox.AutoCompleteMode = AutoCompleteMode.Suggest; 
     combobox.DataSource = list; 
     //combobox.Focus(); 
     //combobox.Text = string.Empty; 
     //combobox.SelectedText = string.Empty; 
    } 

अद्यतन: ठीक है, अब मुझे पता चला मुद्दा यह है कि डेटा स्रोत कुछ BindingContext और CurrencyManager द्वारा किया जाता है स्वचालित रूप से सूची सिंक्रनाइज़ करने के लिए है। लेकिन मुझे लगता है कि किसी को यह पता होना चाहिए कि इस व्यवहार को कैसे अक्षम किया जाए।

मैं 2 अलग-अलग सूचियों का उपयोग नहीं करना चाहता क्योंकि मैं रनटाइम पर इस एकल सूची को संशोधित करने में सक्षम होना चाहता हूं और सभी कॉम्बोबॉक्स पर परिवर्तन दिखाई दे सकते हैं। इसे प्राप्त करने के लिए कोई भी विधि बहुत सराहना की जाएगी।

+0

ठीक है, मैं इसकी पुष्टि कर सकता हूं। आप 'cind1) को' bind() 'को सरल बनाना चाहिए (dataSource = list;' –

+0

@ हेनक चेतावनी क्या है? – Jake

+0

मुझे सटीक कारण नहीं पता है, सरलीकरण समस्या को बेहतर (संकीर्ण) परिभाषित करना है। –

उत्तर

7

आप "हल" कर सकते हैं यह इस तरह:

// combobox.DataSource = list; 
var curr = new BindingSource(list, null);   
combobox.DataSource = curr; 

वहाँ एक डिफ़ॉल्ट BindingSource (Currencymanager) प्रत्येक फार्म कि सिंक में 2 cbx रखने गया था से जुड़ा हुआ है। लेकिन मुझे यकीन नहीं है कि सटीक नियम क्या हैं। मुझे यह भी यकीन नहीं है कि उपरोक्त एक अच्छा विचार है या नहीं।

छोटी सूचियों के लिए मैं केवल अलग प्रतियां बनाउंगा।

+0

मैं लगभग दीवार के खिलाफ अपने सिर को धक्का दे सकता हूं। आप जानते हैं कि आपने मुझे "cbo1.DataSource = list" सेट करने के लिए कहा है और मेरे पास यह पंक्ति Form_Load में थी, जबकि बाइंड() कॉल शुरू किए गए थे। इसलिए जब मैंने बाइंडिंग सोर्स को बाइंड() के अंदर करने की कोशिश की, तो यह काम नहीं किया ... बस मेरे मामले के लिए, यह सूची के साथ काम नहीं करेगा। बाध्यकारी सूची की आवश्यकता है। धन्यवाद! – Jake

0

आप 2 अलग कॉम्बो बॉक्स के लिए डेटा स्रोत के रूप में उसी ऑब्जेक्ट का उपयोग नहीं कर सकते हैं। आपके पास list1 और list2 होना चाहिए प्रत्येक प्रत्येक के साथ प्रत्येक combobox परिभाषित और populate। उसी डेटासोर्स का उपयोग करना मतलब है कि एक combobox में एक चयन दूसरे में परिलक्षित होता है।

+0

जानकारी के लिए धन्यवाद, मुझे अपनी विशिष्ट समस्या के समाधान के साथ आने दो और मैं वापस आऊंगा। – Jake

+1

यह समझ में नहीं आता है, है ना? डेटासोर्स केवल वस्तुओं की सूची है, इसमें चयनित आइटम नहीं है। तो क्यों एक combobox के चयनित आइटम सूची आइटम के लिए एक ही डेटास्रोत का उपयोग कर एक अलग combobox के चयनित आइटम निर्धारित करना चाहिए ...? – TheBlastOne

+0

@TheBlastOne इस मामले में डेटासोर्स उस डेटा को संदर्भित करता है जहां सूची ड्रॉपडाइंडम्स की सूची प्राप्त करेगी। तो यह समझ में आता है, या तो मुझे विश्वास है। अन्य डेटासोर्स एक मेमोरी लोकेशन को संदर्भित करता है जहां यूआई अपडेट होगा क्योंकि उपयोगकर्ता इसके साथ इंटरैक्ट करता है। – Jake

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