2011-11-17 24 views
8

खाली करें मेरे पास एक साधारण विंडोज़ फॉर्म है जिसमें अन्य घटक, ListView ऑब्जेक्ट list नामक ऑब्जेक्ट है। फॉर्म पर, एक बटन मुझे list.Items.Clear() के साथ क्लिक पर सूची को खाली करने में सक्षम बनाता है। यह ठीक काम करता है।एक सूची दृश्य

अब मेरे पास एक अलग वर्ग Test है, जिसका विधि update() फ़ॉर्म के बाहर कुछ घटनाओं पर कॉल किया जाता है। फॉर्म के निर्माण पर, मैं SetList विधि का उपयोग कर सूची का संदर्भ पास करता हूं। डीबग मोड में, update() उन घटनाओं पर कॉल किया जाता है जिन्हें मैं ट्रिगर करता हूं, और इसकी सामग्री निष्पादित होती है, लेकिन मेरी सूची साफ़ नहीं होती है।

यह क्यों है? संदर्भ ठीक से सेट है, मैंने चेक किया।

class Test 
{ 
    private ListView list; 

    public void setList(ListView list) 
    { 
     this.list = list; 
    } 

    public void update() 
    { 
     this.list.Items.Clear(); 
    } 
} 

जब मैं अपने सूची पर करीब देखो अद्यतन में breakpoints डाल() के द्वारा संशोधित किया जा रहा है, सूची साफ किया जाता है और साफ रहता है। यह वास्तव में ऐसा लगता है कि यह एक और सूची संशोधित की जा रही है, लेकिन मेरे पास केवल एक है और इस पर कोई नया नहीं है ... ???? अगर यह काम नहीं करता

public void update() 
    { 
     this.list.Items.Clear(); 
     this.list.Update(); // In case there is databinding 
     this.list.Refresh(); // Redraw items 
    } 

, यह स्पष्ट है कि आप list वस्तु का एक और उदाहरण संशोधित कर रहे हैं:

+1

यदि डेटा स्रोत के माध्यम से बाध्य आइटम 'list.DataSource = null; सूची। डेटाबाइंड(); ' – sll

+0

मेरा अनुमान होगा कि यह नहीं है। मैं हमेशा इस विधि को जोड़ता हूं .list.Items। – Jerome

+3

जोड़ें इस तरह के कोड के साथ 95% बाधा यह है कि आप किसी अन्य फॉर्म इंस्टेंस की सूचीदृश्य को साफ़ कर रहे हैं, जो कि दिखाई नहीं दे रहा है क्योंकि आपने इसे उपयोग करने के बजाय इसे नया बनाया है दृश्य प्रपत्र उदाहरण। –

उत्तर

5

नीचे संशोधित update विधि का उपयोग करें। इस मामले में, अस्थायी रूप से नीचे की तरह वस्तु की घोषणा को संशोधित करें और देखें कि कुछ भी बदलता है या नहीं। यदि ऐसा है, तो आप यकीन है कि आप सूची के दाईं उदाहरण साफ़ किए जा रहे बनाने के लिए अपने कोड की समीक्षा करनी होगी:

private static ListView list; 
0

मेरे मामले में, मैं डेटा बाइंडिंग उपयोग नहीं कर रहा, बल्कि स्पष्ट रूप से आइटम जोड़ने जोड़ें() का उपयोग कर एक पाश में। यह मुझे दिखाई दिया कि ListView.Clear() और ListView.Items.Clear() काम नहीं कर रहे थे।

... ListView था वास्तव में साफ किया बाहर कर देता है, लेकिन मैं इनपुट सूची समाशोधन नहीं किया गया था, तो मैं प्रभावी रूप से समाशोधन किया गया था और उसके बाद पुनः पॉप्युलेट पहले से मंजूरी दे दी आइटम के साथ ListView।

कभी-कभी यह सबसे सरल चीजें हैं ... डी ओह!

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