DataBinding to Odate integer in c#

21 Views Asked by At

I have a custom databinder that works geat for the integer that is an ODate date type. It displays correctly. How do I get the reverse when I save?

private void Binding_ODateFormat(object sender, ConvertEventArgs e)
{

    if (e.DesiredType == typeof(string) && e.Value is int doubleValue)
    {
        e.Value = String.Format("{0:MM/dd/yyyy}", DateTime.FromOADate(doubleValue));
    }
}

private void Binding_ODateParse(object sender, ConvertEventArgs e)
{

    if (e.DesiredType == typeof(double) && e.Value is string stringValue)
    {
        DateTime dt = DateTime.Parse(stringValue);
        double result = dt.ToOADate();

        e.Value = result;

    }
}

That works perfectly fine coming from the database, I need it to go back as integer just as smoothly.

I do not know where to go from here, any suggestions would be great.

Fix:

private void Binding_ODateFormat(object sender, ConvertEventArgs e)
{
 if (e.DesiredType == typeof(string) && e.Value is Int32 
 doubleValue  && (Int32)e.Value > 0)
 {
   
     e.Value = String.Format("{0:MM/dd/yyyy}", 
     DateTime.FromOADate(doubleValue));
 }
 
 }

 private void Binding_ODateParse(object sender, ConvertEventArgs e)
 {
 if (e.DesiredType == typeof(Int32) && e.Value is string 
 stringValue)
 {
     DateTime dt;
     if (DateTime.TryParse(stringValue, out dt))
     {
         Int32 result = Convert.ToInt32(dt.ToOADate());

         e.Value = result;
     }
     else
     {
         e.Value = 0;
     }

 }
 
 }
0

There are 0 best solutions below