2010-11-17 13 views
6

मान्य है मैं एक WinForms चेकबॉक्स है कि एक इकाई की रूपरेखा इकाई की संपत्ति के लिए बाध्य है है।databound मूल्य गलत जब तक पाठ बॉक्स/चेकबॉक्स

उदाहरण के लिए, मैं bindingSource.DataSource = myDog एक चेकबॉक्स संपत्ति IsSleeping करने के लिए बाध्य के साथ, ताकि उपयोगकर्ता बॉक्स से जांचने पर, IsSleeping सच हो जाता है, और उपयोगकर्ता बॉक्स unchecks जब, IsSleeping झूठा हो जाता है।

यह ठीक काम करता है। समस्या जब तक चेकबॉक्स मान्य है, जब फ़ोकस ले जाता है दूर चेकबॉक्स से कुछ और करने के लिए जो केवल तब होता है कि IsSleeping का मूल्य अपडेट नहीं किया जाता है। इस प्रकार, यदि मैं ऐसा करने के लिए कुछ करना चाहता हूँ जब बॉक्स चेक नहीं किया:

private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e) 
{ 
    OnDogPropertyChanged(myDog); 
    MyAnimalEntities.SaveChanges(); 
} 

myDog.IsSleeping अभी भी सच हो जाएगा, जब तक चेकबॉक्स का Validated बाद में उठाया जाता है। इस प्रकार, जब गरीब myNaughtyKitty(जो DogPropertyChanged घटना के लिए सुन रहा है)myDog के भोजन myDog सो रहा है सोच पकवान से बाहर खाने के लिए आता है, myDog वास्तव में सिर्फ जागने रहा है! अरे नहीं!

भी बदतर, MyAnimalEntities.SaveChanges() अभी तक myDog में परिवर्तन नहीं देखा है, इसलिए IsSleeping का मूल्य डेटाबेस को बचाया कभी नहीं किया गया है। IsSleepingCheckbox_Validated को .SaveChanges() कॉल बढ़ते इस समस्या का समाधान नहीं होता है, क्योंकि अगर चेकबॉक्स चालू किए जाने पर, लेकिन कभी चेकबॉक्स से दूर फोकस ले जाए बिना तो प्रपत्र बंद कर दिया है, चेकबॉक्स पुष्टि कभी नहीं है और इस तरह अपने राज्य को बचा लिया कभी नहीं किया जाता है!

मुझे लगता है कि यह डाटाबेसिंग और चेकबॉक्स/टेक्स्टबॉक्स के साथ एक आम समस्या है, और वास्तव में मुझे ऑनलाइन विषय पर एक टन पोस्ट मिल गए हैं, लेकिन किसी को भी कोई समाधान नहीं लगता है। किसी को भी इस के लिए एक समाधान ढूँढने में सक्षम हो गया है?

उत्तर

7

आप OnPropertyChanged को Binding.DataSourceUpdateMode संपत्ति (डिफ़ॉल्ट OnValidation है), जब उपयोगकर्ता चेकबॉक्स पर क्लिक डेटा स्रोत से अद्यतन किया जा करने का कारण होगा जो बदल सकते हैं। दुर्भाग्य से, CheckedChanged घटना अभी भी पहले डेटा स्रोत अद्यतन किया जाता है आग।

इससे निपटने के लिए, आप BindingSource.ListChanged ईवेंट को संभाल सकते हैं और वहां अपना SaveChanges कोड ले जा सकते हैं।

bindingSource = new BindingSource(); 
bindingSource.DataSource = myDog; 
checkBox1.DataBindings.Add(new Binding("Checked", bindingSource, "IsSleeping")); 
checkBox1.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; 

bindingSource.ListChanged += new ListChangedEventHandler(bindingSource_ListChanged); 

HTH

+0

आप गूगल में खोज करने के घंटे के बाद मेरे जीवन बचाया। धन्यवाद। – superjugy

-1

यह इस काम करने के लिए उचित तरीका है। संभाल चेक बॉक्स मान्य घटना

/// <summary> 
    /// Handles Check Box State if Changed 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void checkBoxBidSummaryItem_Validated(object sender, EventArgs e) 
    { 
     // Code to execute... 
     _MyEntity.Save(_businessObject.SelectedBid); 
    } 
+0

मैं प्रश्न में विस्तार से बताया क्यों यह काम नहीं करता –

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