c# सी#दिनांकटाइम पिक्चर डेटाबैडिंग पार्स ईवेंट काम नहीं कर रहा है




parsing binding (4)

मेरे पास एक डाटाएपिपिक्र है जो मैं डाटासेट में नल योग्य दिनांक / समय कॉलम के साथ बाध्य कर रहा हूं। मैंने रिक्त ऑब्जेक्ट मान को नल और नल के लिए सफलतापूर्वक प्रारूप ईवेंट लागू किया। लेकिन, जब मैं डीटीपी नियंत्रण को अनचेक करता हूं, तो यह डेटासेट में रिक्त नहीं हो जाता। यह मेरा कोड है:

dtpBirthdate.DataBindings.Add(new Binding("Value", bsStaff, "birthDate", true));
dtpBirthdate.DataBindings["Value"].Format += new ConvertEventHandler(dtpFormat);
dtpBirthdate.DataBindings["Value"].Parse += new ConvertEventHandler(dtpParse);

प्रारूप और पार्स ईवेंट:

private void dtpFormat(object sender, ConvertEventArgs e)
{
      Binding b = sender as Binding;
      if(b != null)
      {
           DateTimePicker dtp = (b.Control as DateTimePicker);
           if(dtp != null)
           {
                if (e.Value == null || e.Value == DBNull.Value)
                {
                    dtp.Checked = false;
                    dtp.CustomFormat = " ";
                    e.Value = false;
                }
                else
                {
                    dtp.Checked = true;
                    dtp.CustomFormat = "dd-MMM-yyyy";
                    dtp.Value = (DateTime) e.Value;
                }
            }
        }
    }

    private void dtpParse(object sender, ConvertEventArgs e)
    { 
        Binding b = sender as Binding;

        if (b != null)
        {
            DateTimePicker dtp = (b.Control as DateTimePicker);
            if (dtp != null)
            {
                if (dtp.Checked == false)
                {
                    e.Value = DBNull.Value;
                }
                else
                {
                    e.Value = dtp.Value; 
                }
            }
        }
   }

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

संपादित करें: बीएसएसएटीएफ़ बाइंडिंग्स के लिए एक डाटाग्रिड दृश्य भी है।


इस मुद्दे को आपको ई। वेल्यू को कुछ सेट करने की आवश्यकता है; लेकिन अगर आप इसे बदलते हैं, तो इसे फिर से पर्स होगा इसे अपने मूल मान पर सेट करने का प्रयास करें

e.Value = dtp.Value;

यहां एक ऐसे व्यक्ति के लिए एक लिंक है जो पहले इस पर चल पड़ा है। वे आपके DbNull.Value का उपयोग नहीं कर रहे थे, लेकिन इसके अलावा यह लगभग समान है कि आप क्या कर रहे हैं।

http://blogs.interknowlogy.com/2007/01/21/winforms-databinding-datetimepicker-to-a-nullable-type/


आप निर्बाध जांच से पहले "बाध्यकारी बी = प्रेषक को बाध्यकारी" का कास्टिंग कर रहे हैं। जांचें कि क्या प्रेषक निर्बाध होने से पहले शून्य है और आपको ठीक होना चाहिए।


डीटीपी पर्सेज ई। वेल्यू = डीबीएनल। वैल्यू स्थापित कर रहा है जो डीटीपीएफ़ॉर्मेट को आग लगाएगा क्योंकि मूल्य बदल गया है जो बदले में ई। वेल्यू = झूठी सेट करता है जो डीबीएनल से अलग है। मूल्य जो फिर डीटीपीपीर्स को फिर से मार देगा E.value = false को dtpFormat से निकालने का प्रयास करें


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

कोड की यह रेखा Imho:

if (e.Value == null || e.Value == DBNull.Value)

को बदलने की जरूरत है

if (e.Value == DBNull.Value || e.Value == null)





nullable