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.