2011-06-20 7 views
54

के रूप में शब्दकोश का उपयोग कर बाध्यकारी कम्बोबॉक्स मैं .NET 2.0 का उपयोग कर रहा हूं और मैं एक सॉन्गबॉक्स के डेटासोर्स को सॉर्ट किए गए शब्दकोश में बांधने की कोशिश कर रहा हूं।डेटासॉर

तो मुझे जो त्रुटि मिल रही है वह है "डेटामेम्बर प्रॉपर्टी 'कुंजी' डेटासोर्स पर नहीं मिल सकती है"।

 SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache(); 
     userListComboBox.DataSource = new BindingSource(userCache, "Key"); //This line is causing the error 
     userListComboBox.DisplayMember = "Key"; 
     userListComboBox.ValueMember = "Value"; 

उत्तर

105
SortedDictionary<string, int> userCache = new SortedDictionary<string, int> 
{ 
    {"a", 1}, 
    {"b", 2}, 
    {"c", 3} 
}; 
comboBox1.DataSource = new BindingSource(userCache, null); 
comboBox1.DisplayMember = "Key"; 
comboBox1.ValueMember = "Value"; 

लेकिन तुम क्यों तय कर रहे हैं ValueMember करने के लिए "मूल्य", यह बाध्य नहीं किया जाना चाहिए करने के लिए "कुंजी" (और DisplayMember "मान" के रूप में अच्छी तरह से करने के लिए)?

+0

वैसे यह किसी भी तरह से कोई फर्क नहीं पड़ता। लेकिन यह चारों ओर स्विच करने के लिए और अधिक समझ सकता है।हालांकि मेरी समस्या यह है कि "comboBox1.DataSource = नया बाइंडिंग स्रोत (उपयोगकर्ता कैश, शून्य);" मैं वहां खींच नहीं सकता क्योंकि यह मुझे एक त्रुटि देता है। – user803952

+1

क्या त्रुटि है, जो वास्तव में मेरे लिए काम करता है? –

+1

"ArgumentException: नए प्रदर्शन सदस्य से जुड़ नहीं सकता है। पैरामीटर नाम: newDisplayMember।" मुझे नहीं पता कि उपयोगकर्ता 803952 में क्या त्रुटि मिली है, लेकिन यह त्रुटि है * I * जब मैंने इसे 'IDictionary ' के साथ करने का प्रयास किया। –

0

यदि यह काम नहीं करता है तो क्यों नहीं बस शब्दकोश पर फोरैच लूप को combobox में सभी आइटम जोड़ते हैं?

foreach(var item in userCache) 
{ 
    userListComboBox.Items.Add(new ListItem(item.Key, item.Value)); 
} 
+0

बाध्यकारी और आइटम जोड़ने एक ही बात नहीं है। खैर, हो सकता है कि ओपी को वास्तव में क्या चाहिए, कौन जानता है? ;) – jv42

+0

मुझे पता है लेकिन मुझे कोई कोड नहीं दिख रहा है जो डेटाबेस पर निर्भर है। – thekip

+0

वैसे जो आपने सुझाया है वह काम करेगा, लेकिन "new ListItem" System.Web.UI.WebControls नेमस्पेस में मौजूद है और मैं इसे विंडोज़ फॉर्म एप्लिकेशन के लिए आयात नहीं करता। – user803952

2

एक शब्दकोश को सीधे डेटा स्रोत के रूप में उपयोग नहीं किया जा सकता है, आपको और करना चाहिए।

SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache(); 
KeyValuePair<string, int> [] ar= new KeyValuePair<string,int>[userCache.Count]; 
userCache.CopyTo(ar, 0); 
comboBox1.DataSource = ar; new BindingSource(ar, "Key"); //This line is causing the error 
comboBox1.DisplayMember = "Value"; 
comboBox1.ValueMember = "Key"; 
18

मैंने सोरिन कॉमनेस्कू के समाधान का उपयोग किया, लेकिन चयनित मूल्य प्राप्त करने का प्रयास करते समय एक समस्या को मारा। मेरा combobox एक टूलस्ट्रिप combobox था। मैंने "combobox" प्रॉपर्टी का उपयोग किया, जो एक सामान्य combobox का खुलासा करता है।

मैं एक

Dictionary<Control, string> controls = new Dictionary<Control, string>(); 

बाध्यकारी कोड था (Sorin Comanescu के समाधान - एक आकर्षण की तरह काम किया):

controls.Add(pictureBox1, "Image"); 
controls.Add(dgvText, "Text"); 
cbFocusedControl.ComboBox.DataSource = new BindingSource(controls, null); 
cbFocusedControl.ComboBox.ValueMember = "Key"; 
cbFocusedControl.ComboBox.DisplayMember = "Value"; 

समस्या यह है कि जब मैं चयनित मूल्य प्राप्त करने की कोशिश की, मैं नहीं था 'था टी को पुनः प्राप्त करने का एहसास नहीं है। कई प्रयासों के बाद मुझे यह मिला:

var control = ((KeyValuePair<Control, string>) cbFocusedControl.ComboBox.SelectedItem).Key 

आशा है कि यह किसी और की मदद करेगी!

+0

सेट करने के बाद यह काम करता है, मैंने इसे अपने काम में लाने के लिए निम्नलिखित कोड का उपयोग किया है। https://gist.github.com/psykzz/5374823 – PsyKzz

+0

आप इसे इस तरह भी कर सकते हैं (चयनित मान प्राप्त करना): var value = comboBox.SelectedItem; var someItem = value.GetType()। GetProperty ("कुंजी")। GetValue (मान, शून्य); –

+1

अंतिम पंक्ति को भी कम किया जा सकता है: var control = ((KeyValuePair ) cbFocusedControl.ComboBox.SelectedItem) .Key; 1) अनावश्यक बाहरी कोष्ठक, 2) संकलक जानता है कि कुंजी पहले से ही एक नियंत्रण है क्योंकि यह KeyValuePair को कास्ट कर रहा है, इसलिए नियंत्रण में कलाकार की आवश्यकता नहीं है। –

3
userListComboBox.DataSource = userCache.ToList(); 
userListComboBox.DisplayMember = "Key"; 
6
 var colors = new Dictionary < string, string >(); 
     colors["10"] = "Red"; 

बता गया करने के लिए

 comboBox1.DataSource = new BindingSource(colors, null); 
     comboBox1.DisplayMember = "Value"; 
     comboBox1.ValueMember = "Key"; 

पूर्ण स्रोत ... Dictionary as a Combobox Datasource

Jeryy

0

उपयोग बाध्यकारी ->

comboBox1.DataSource = colors.ToList(); 

जब तक शब्दकोश को सूची में परिवर्तित नहीं किया जाता है, कॉम्बो-बॉक्स अपने सदस्यों को पहचान नहीं सकता है।

0

बस इस तरह करने की कोशिश करें ....

SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache(); 

    // Add this code 
    if(userCache != null) 
    { 
     userListComboBox.DataSource = new BindingSource(userCache, null); // Key => null 
     userListComboBox.DisplayMember = "Key"; 
     userListComboBox.ValueMember = "Value"; 
    } 
संबंधित मुद्दे