2009-11-02 18 views
8

अद्यतन करने के प्रयास को दबा नहीं देता है। मुझे ऐसा व्यवहार नहीं मिल रहा है जिसे मैं किसी टेक्स्ट ऑब्जेक्ट के लिए एक व्यावसायिक ऑब्जेक्ट में एक पूर्णांक संपत्ति से बंधने की अपेक्षा करता हूं।डाटाबेस प्रमाणीकरण ईवेंट को रद्द करने का प्रयास डेटा स्रोत

यहाँ मैं क्या किया है:

(1) सेट DataSourceUpdateMode, करने के लिए टेक्स्ट बॉक्स की अधिकतम: OnValidation

(2) Validating टेक्स्टबॉक्स के लिए ईवेंट में, e.Cancel = True सेट करें यदि Integer.TryParse विफल हो जाता है।

(3) Binding.Parse और Binding.BindingComplete पर हैंडलर जोड़ें और हैंडलर में ब्रेकपॉइंट रखें।

एप्लिकेशन चलाएं, टेक्स्टबॉक्स में "asdasd" डालें और टैब आउट करें। e.Cancel = True सेट करने के बावजूद, Parse और BindingComplete ईवेंट दोनों उठाए गए हैं। दस्तावेज़ीकरण के अनुसार, e.Cancel = True सेटिंग को किसी और तर्क को दबा देना चाहिए।

मैंने यह पता लगाने के लिए एमएसडीएन की खोज की कि ऐसा क्यों होता है लेकिन मुझे कुछ भी नहीं मिला। क्या कोई इस बारे में जानता है कि मैं इस पर कुछ विवरण कहां से कर सकता हूं?

ईटीए: मैंने मान्य घटना के लिए एक हैंडल भी जोड़ा।

बुरा डेटा::

(1) मान्य यहाँ घटनाओं के अनुक्रम है। (मैं e.Cancel = True सेट)

(2) पार्स

(3) BindingComplete

अच्छा डेटा:

(1) मान्य कर

(2) पार्स

(3) बाइंडिंग पूर्ण

(4) मान्य

ईटीए 2: थोड़ी अधिक जानकारी और एक कार्य-आसपास।

इस व्यवहार के साथ समस्या यह है कि यदि आपके पास कुछ प्रमाणीकरण है जो संपत्ति सेटटर में लागू नहीं किया गया है।

उदाहरण के लिए, मान लीजिए कि मेरी पूर्णांक संपत्ति एक विषम संख्या होनी चाहिए। मैं संपत्ति सेटटर में इसकी जांच नहीं करता, इसलिए मैं मान्य घटना में चेक करता हूं।

जैसा कि आप देख सकते हैं, उपर्युक्त व्यवहार से, मान, वैध पूर्णांक के रूप में, डेटा स्रोत पर लिखा जाएगा, भले ही मैं सत्यापन रद्द कर दूं।

इस तथ्य के बावजूद कि डेटा स्रोत अपडेट किया गया है, यदि आप मान्य ईवेंट में रद्द करें सेट करते हैं, तो मान्य घटना को निकाल दिया नहीं जाएगा, इसलिए आप अभी भी उपयोगकर्ता को प्रगति से रोक सकते हैं।जो सफलतापूर्वक पूरा करने से बाध्यकारी रोकता है -

काम के आसपास ::

डेटा स्रोत अपडेटिंग रोकने के लिए, आप Binding.Parse स्थिति में मान्य है, और एक अपवाद फेंक की जरूरत है।

+0

अच्छा खोज। [एक Winforms बग की तरह लग रहा है] [1]। [1]: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=490267 –

+0

चीयर्स, मैंने बग को वोट दिया है और एक काम जोड़ा है। – Jules

उत्तर

1

CancelEdit को कॉल जोड़ने से अंतर होता है।

private void textBox1_Validating(object sender, CancelEventArgs e) 
    { 
     bindingSource1.CancelEdit(); 
     e.Cancel = true; 
    } 
+0

अगली बार मैं जांच करूंगा कि किस वर्ष प्रश्न पोस्ट किया गया था .... – helgeheldre

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