2010-08-12 13 views
9

डेटाग्रिड व्यू के लिए सत्यापन तर्क कोड और सशर्त स्वरूपण कोड को लागू करने के लिए सबसे अच्छी जगह क्या है?DataVridueChanged बनाम CellValidating घटनाओं के लिए DataGridView

इस नियंत्रण पर मैंने कई पुस्तकों और लेखों में पढ़ा है, ऐसा लगता है कि इसके लिए संभालने के लिए उचित घटना सेलविलिडेटिंग है। ठीक है, नाम से भी अधिक इसका अर्थ है।

हालांकि, यह घटना मेरे स्वाद के लिए थोड़ी बार ट्रिगर करती है और मुझे यकीन नहीं है कि इसकी आवश्यकता है। उदाहरण के लिए, यह ईवेंट हर बार ट्रिगर करता है जब उपयोगकर्ता दूसरी पंक्ति पर स्विच करते हैं।

दूसरी ओर, सेलवैल्यू चेंजेड ईवेंट केवल तभी ट्रिगर होता है जब सेल का मान बदलता है, जिसका अर्थ है कि सत्यापन कोड केवल तभी चलता है जब मान बदलता है और जब भी कोई उपयोगकर्ता कक्ष बदलता है।

अब, चूंकि इतनी सारी किताबें सेलविलिडेटिंग घटना का उपयोग करती हैं, मुझे आश्चर्य है कि क्या सेलवैल्यू चेंज का उपयोग करने के साथ कोई गॉचा (उदाहरण के लिए प्रदर्शन में) नहीं है?

मैं समझता हूं कि सरल सत्यापन और सशर्त हाइलाइटिंग नियमों का उपयोग करते समय प्रदर्शन में प्रभाव अप्रासंगिक होना चाहिए, लेकिन जब भी इससे बचा जा सकता है तो उपयोगकर्ता हर बार बेकार कोड नहीं चला सकता है।

धन्यवाद,

+2

आपके द्वारा अनुसरण किए जाने वाले डिज़ाइन पैटर्न (यदि कोई है) पर निर्भर करता है। तकनीकी रूप से आपको अपने यूआई परत से अपने व्यापार तर्क को दूर करना चाहिए और अपनी प्रस्तुति परत में डेटा को प्रमाणित करने के लिए कुछ प्रकार के सत्यापन प्रमाणीकरण करना चाहिए और फिर परिणामों को अपने दृश्य में वापस पोस्ट करना चाहिए। –

+0

हाँ, मैं इसके साथ सहमत हूं अगर यह केवल सत्यापन के लिए है। हालांकि, सशर्त स्वरूपण कोड के लिए, मुझे डेटाग्रिड व्यू के संबंधित-कोड (या डेटाग्रिड व्यू से प्राप्त वर्ग में इसे समेकित करने के लिए) में रहने के लिए अन्य तरीका नहीं दिखता है। –

उत्तर

4

मैं वर्तमान में CellValueChanged उपयोग कर रहा हूँ कस्टम मान्यता के साथ एक ग्रिड पर और प्रदर्शन या कुछ और के साथ कोई समस्या नहीं पड़ा है।

मैंने इस घटना का उपयोग किया क्योंकि मैं घटनाओं के एक निश्चित क्रम को आग लगाना चाहता था, लेकिन केवल जब उपयोगकर्ता सेल के मूल्य को बदलता था।

मैंने प्रदर्शन हिट के रास्ते में बहुत कुछ नहीं देखा है (100 - 5000 पंक्तियों के साथ परीक्षण किया गया)।

मुझे लगता है कि अंत में यह आपकी मान्यताओं की आवश्यकता पर निर्भर करता है। मेरे मामले में, सेलवैल्यू चेंज ने जो किया था वह किया है।

संपादित

CellValidating घटना के बारे में सबसे बड़ी बात यह है कि आप एक सेल छोड़ने से उपयोगकर्ता को रोक सकता है, अगर दर्ज किया गया मान अपने प्रमाणीकरण में सफल नहीं करता है। मैं यह नहीं करना चाहता था।

+1

धन्यवाद, सेल वैलिडेटिंग के बारे में अच्छा बिंदु उपयोगकर्ता को सेल छोड़ने से रोकने की इजाजत देता है। मेरे वर्तमान प्रोजेक्ट में मुझे कुछ नहीं चाहिए लेकिन मुझे नहीं लगता कि मुझे यह अंतर याद आया। –

+0

मैं उपयोगकर्ता को सेल छोड़ने से रोकना नहीं चाहता अगर यह सत्यापन पास नहीं करता है। क्या आप मुझे अपने सेलवैल्यू चेंज फ़ंक्शन का उदाहरण दे सकते हैं? अभी मैं सेल वैलिडेटिंग, सेल वैलिडेटेड और सेलइंड एडिट का उपयोग कर रहा हूं। लेकिन मुझे लगता है कि आपकी विधि सबसे अच्छी है। यदि आप प्रदान कर सकते हैं और उदाहरण दे सकते हैं तो इससे बहुत मदद मिलेगी। – shenk

+0

"सेल वैलिडेटिंग इवेंट यह है कि आप उपयोगकर्ता को सेल छोड़ने से रोक सकते हैं" जो उपयोगकर्ता को फॉर्म बंद करने से रोकता है। अच्छा अभ्यास नहीं है, लेकिन विशेष स्थिति में उपयोगी हो सकता है। – miki

-1

सेल सरलता के अंदर यह सरल है कि आपको यह जांचने की आवश्यकता है कि कोई शर्त सही है या नहीं। अगर आपकी हालत गलत है तो आप इस कोड को e.cancel जोड़ दें। यह कर्सर को अपना ध्यान खोने से रोक देगा

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