Asp.Net-DataBinding-Probleme mit dem DateTime Format in einer FormView mit einer ObjectDataSource

In einem FormView-Control habe ich ein DateTime-Control das mir beim Update Probleme machte (Asp.Net 2.0). Ich habe folgende Meldung erhalte:

"Cannot convert value of parameter 'Birthday' from 'System.String' to 'System.DateTime'

oder auf Deutsch: Der Wert von Parameter "Birthday" kann nicht von "System.String" in "System.DateTime" konvertiert werden.

Der Fehler taucht in der Methode System.Web.UI.WebControls.ObjectDataSourceView.ConvertType auf. Offenbar wird da fix mit der Methode typeConverter.ConvertFromInvariantString() konvertiert.

Die Lösung dieses Problems sieht wie folgt aus:

 protected void FormViewDetail_ItemUpdating(object sender, FormViewUpdateEventArgs e)
  {

       // please handle here null-value
       e.NewValues["Birthday"] =
             DateTime.Parse(e.NewValues["Birthday"].ToString()).ToString(CultureInfo.InvariantCulture);
  }

 

Mein Problem war aber immer noch nicht gelöst. Nach längerem Suchen habe ich gemerkt, dass meine ObjectDataSource  ConflictDetection="CompareAllValues" verwendet, d.h. die Update-Methode erhält auch das alte Objekt als Parameter. Also muss auch der alte Wert präpariert werden:

 protected void FormViewDetail_ItemUpdating(object sender, FormViewUpdateEventArgs e)
  {
       // please handle here null-value
      e.NewValues["Birthday"] =
              DateTime.Parse(e.NewValues["Birthday"].ToString()).ToString(CultureInfo.InvariantCulture);
       e.OldValues["Birthday"] =
             DateTime.Parse(e.OldValues["Birthday"].ToString()).ToString(CultureInfo.InvariantCulture);
  }

Es ist schade, dass es nicht ausreicht die Thread.CurrentThread.CurrentCulture zu setzten.

Kommentar schreiben