2013-02-19 25 views
6

करता रहा ListBox.Refresh() विधि गलतफहमी हो रहे हैं और मुझे उम्मीद थी किसी ने मुझे बाहर करने में मदद कर सकता है।ListBox डेटा स्रोत की स्थापना की है, लेकिन कुछ भी नहीं ताज़ा

मैं क्या करने की कोशिश कर रहा हूं:
मैं एक विंडोज़ फॉर्म के प्रारंभ पर एक सूची बॉक्स का डेटा (एसक्यूएल डेटाबेस का स्रोत = तालिका) लोड करना चाहता हूं। साथ ही जब उपयोगकर्ता डेटाबेस में डेटा जोड़ता है तो मैं सूची बॉक्स को अपडेट करना चाहता हूं।

तर्क:

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView; 

DBquery.informationRetreval() मेरी DBQuery स्थिर वर्ग के भीतर एक स्थिर विधि है:
मैं अपने स्रोत के रूप में एक SQL डेटाबेस है, यह के रूप में स्थापित किया जाएगा। यह सब डेटाबेस से एक टेबल स्थापित करता है और फिर तालिका देता है।

मैं InitializeComponent रूप में एक ही विधि के भीतर डेटा स्रोत सेट (तो मेरे लिस्टबॉक्स मौजूद डेटा के साथ लोड होगा):

public Settings() 
    { 
     InitializeComponent(); 
     listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView; 
    } 

उपयोगकर्ता अधिक डेटा जोड़ता है: मैं एक तरीका है जिसमें मैं जोड़ने के फोन डेटाबेस के लिए डेटा और फिर मैं फोन:

listBoxDays.Refresh(); //update listbox 

समस्या: यह लिस्टबॉक्स अपडेट नहीं होता। मेरे सूची बॉक्स के प्रारंभ होने पर डेटा पॉप्युलेट हो जाएगा लेकिन इसके बाद यह नहीं बदलेगा (इसलिए रीफ्रेश काम नहीं करता है)। ऐसा क्यों है? मैं फिर से डेटासोर्स सेट कर सकता था लेकिन यह मैला लगता है। कुछ दस्तावेज देखने के बाद मैंने घटना हैंडलर डेटासोर्स चेंज किया जो कि मैं जो खोज रहा हूं उसके लिए शायद अधिक हो। फिर भी काम क्यों ताज़ा नहीं करेंगे?

आपके धैर्य के लिए धन्यवाद। अगर मुझे और स्पष्ट होना चाहिए तो कृपया मुझे बताएं।

उत्तर

9

ताज़ा करें(): अपने ग्राहक क्षेत्र को अमान्य करने के लिए नियंत्रण को मजबूर करता है और तुरंत स्वयं को और किसी भी बच्चे के नियंत्रण को दोबारा हटा देता है।

ताज़ा करें आपके नियंत्रण को पुनर्जीवित नहीं करेगा, यह केवल नियंत्रण को फिर से खींचा जाएगा। आप

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView; 

और फिर से बाँध इसके साथ फिर से DataSource सेट करना होगा।

स्रोत: (उदा। कोई अलग क्वेरी) Microsoft MSDN

+0

यह ईवेंट हैंडलर उपयोग करने के लिए अधिक फ़ायदेमंद होगा? – 40Alpha

+0

मैं एक ऐसी विधि बनाने के लिए कहूंगा जो नियंत्रण को साफ और बांध देगा और इसे InitializeComponent() से कॉल करेगा और हर जगह से आप Refresh() फ़ंक्शन का उपयोग कर रहे हैं। –

+1

इसके अलावा, कम से कम वीबी के संस्करण में मैं काम कर रहा हूं, मुझे एक त्रुटि मिली है कि डेटा डेटा स्रोत से बाध्य होने पर आप आइटम को साफ़ नहीं कर सकते हैं। सभी मैं जोड़ने के लिए किया था एक एक लाइन उक्त 'Listbox.DataSource = Nothing' और फिर मेरा आइटम साफ़ और अपने डेटा rebind – PsychoData

15

यह केवल ताज़ा कर देंगे, जब वस्तुओं को बदल दिया है, डेटा नहीं। आप यह कर सकते हैं:

listBoxDays.DataSource = null; 
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView; 

इसे रीफ्रेश करने के लिए ... हर बार आपको आवश्यकता होती है। ListControl.DataSourceChanged ... जब होता है डेटा स्रोत परिवर्तन:

+2

बढ़िया! मुझे नहीं लगता कि हमें यह – rajeemcariazo

+0

क्यों करना है: "यह केवल तभी ताज़ा हो जाएगा जब ऑब्जेक्ट्स बदल गए हों (उदा। एक अलग क्वेरी), डेटा नहीं" इस प्रश्न/समस्या के बारे में कई अन्य उत्तरों में गायब है – Pavenhimself