2012-12-30 13 views
5

मैंने बहुत कुछ किया है। बहुत कुछ मिला। दुर्भाग्य से कुछ भी आसान, आसान और सबसे महत्वपूर्ण, सरल नहीं है। मैं चाहता हूं कि कुछ लड़के method लिखें जो List<string> लेता है और पिछले Items को हटा देता है, फिर यह List<string> सेट करें।कॉम्बोबॉक्स आइटम रीफ्रेश करें, सबसे आसान तरीका

वर्तमान में मेरे पास एक विधि है लेकिन यह त्रुटि मुक्त नहीं है।

public void refreshList(List<string> list){ 
    albumList.Items.Clear(); 
    albumList.DataSource = list; 
} 
+0

शायद उपयोगी हालांकि नहीं है कि तुम क्या (क्या आप बड़ी तस्वीर में क्या करना चाहते हैं पर निर्भर करता है) के लिए कहा: observale संग्रह सामान्य सूचियाँ बनाम .. http://www.codeproject.com/Articles/42536/ सूची-बनाम-पर्यवेक्षण चयन-बनाम-इनोटिफ़ाईप्रॉपर्टीखा –

उत्तर

4

आप albumList.Items.Clear की जरूरत नहीं है();

इस कोड को ठीक

public void refreshList(List<string> list){ 
    albumList.DataSource = list; 
} 
+4

नए आइटम सूची में प्रकट नहीं होते हैं। –

+0

क्या आप अपना अधिक कोड दिखा सकते हैं क्योंकि मैंने कोशिश की और यह – phnkha

+0

काम किया हां यह काम किया। मैंने पिछली सूची को रीसेट नहीं किया था। अब, मैं 'सूची = शून्य' कर रहा हूं, और फिर 'सूची = नई सूची ();' फिर मैं 'ताज़ा करें सूची (सूची);'। तो, यह काम कर रहा है। धन्यवाद :) –

4

डेटा स्रोत से बाध्य होने पर, Items.Clear(); काम नहीं करता है। यह होना चाहिए:

albumList.DataSource = list; 

या सुनिश्चित रहें:

albumList.DataSource = null; 
albumList.DataSource = list; 
+1

पिछली वस्तुओं को हटाया नहीं गया है, इस तरह। इसके बजाय, नए आइटम पिछले के साथ संलग्न हैं। –

12

काम करता है किसी को अब भी सोच रहा है।

आप बाइंडलिंगलिस्ट और बाइंडिंगसोर्स का उपयोग कर सकते हैं।

BindingList<YOUR_CLASS_TYPE> bindinglist = new BindingList<YOUR_CLASS_TYPE>() 
BindingSource bSource = new BindingSource(); 
bSource.DataSource = bindinglist; 
ComboBox.DataSource = bSource; 

आप अपनी बाध्यकारी सूची में सभी आइटम जोड़ते हैं और वे स्वचालित रूप से आपके combobox के भीतर अपडेट हो जाएंगे।

यदि आप एक क्रमबद्ध combobox चाहते हैं तो आप बाइंडिंगलिस्ट को एक कंटेनर के साथ बना सकते हैं जो IList से विरासत में मिलता है, जैसे सूची में एक प्रकार का फ़ंक्शन होता है। फिर आप उस IList संदर्भ को सॉर्ट कर सकते हैं और यह combobox के भीतर फिर से दिखाई देगा।

+1

अभी भी एक समस्या है; यदि आप बाध्यकारी सूची को स्रोत के रूप में एक संपादन योग्य ग्रिड पर सेट करेंगे, और उसी बाइंडिंगलिस्ट (संदर्भ द्वारा) का उपयोग किसी अन्य रूप में प्रदर्शित करने के लिए किया जाएगा; ग्रिड में आइटम को संपादित करने से वस्तुओं को किसी अन्य रूप में रीफ्रेश नहीं किया जाएगा। तो बस अपना जवाब पूरा करने के लिए; यदि मैंने वर्णन किया है, तो बाध्यकारी सूची का उपयोग कर रहे सभी नियंत्रणों में आइटम रीफ्रेश करने के लिए बस 'बाइंडिंगलिस्ट। रीसेट बाइंडिंग्स();' का उपयोग करें। – Jinx

+0

हां, यह एक चेतावनी है। धन्यवाद! – Fdej

+0

इसे पोस्ट करने के लिए बहुत बहुत धन्यवाद !!! मैंने इसे 3 घंटे तक शोध किया था और एक दर्जन पोस्ट, ब्लॉग और एमएसडीएन लेख पढ़े थे। मुझे खुशी है कि इस तरह के बहुत सारे संसाधनों की सिफारिश करने के बजाए यह एक साधारण फिक्स में समाप्त हुआ :)! – christopheralan88

0

यदि आप डेटासोर्स का उपयोग कर रहे हैं तो आपको नई सूची के लिए आइटम साफ़ करने की आवश्यकता है। चूंकि आप डेटासोर्स का उपयोग करते समय स्पष्ट नहीं कर सकते हैं, इसलिए आपको इसे पहले शून्य पर सेट करने की आवश्यकता है।

albumList.DataSource = null; 
albumList.Items.Clear(); 
albumList.DataSource = list;