Hallo,
Warum funktioniert folgendes Beispiel nicht? Sobald die Daten über den ObjectDataSource aktualisiert werden sollen (Methode SetUser) kommt der Fehler:
"Der Wert von Parameter "Geburtstag" kann nicht von "System.String" in "System.DateTime" konvertiert werden."
Warum kann der ObjectDataSource die Eigenschaft von Person nicht setzen?
Mir geht es darum nicht alle einzelnen Parameter wie:
SetPerson(string name, DateTime geburtstag
übergeben zu müssen da ich Klassen habe die weit mehr als 100 Eigenschaften besitzen.
Ich hoffe ihr könnt mir helfen.
public class Person
{
private string _name = "";
private DateTime _geburtstag = DateTime.Today;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public DateTime Geburtstag
{
get
{
return _geburtstag;
}
set
{
_geburtstag = value;
}
}
public Person()
{
}
public static Person GetPerson()
{
// Person laden...
}
public static void SetPerson(Person person)
{
// Person speichern...
}
}
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DataObjectTypeName="Person" SelectMethod="GetPerson" TypeName="Person"
UpdateMethod="SetPerson">
<UpdateParameters>
<asp:Parameter Name="person" Type="Object" />
</UpdateParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Geburtstag" HeaderText="Geburtstag"
SortExpression="Geburtstag" />
</Columns>
</asp:GridView>
Du musst die Update Parameter "einzeln" definieren
Die Klasse Person checkt der ODS nicht.
Danke für den Hinweis, aber genau das möchte ich ja verhindern. 😉
Da bleibt mir wohl nur übrig die Eigenschaften vom Typ Object zu machen und intern zu casten. Schade eigentlich, da ich gerne eine typisierte Schnittstelle gehabt hätte.
Eines kannst noch probieren
protected void MAGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
e.NewValues["InfDatum"] = DateTime.Parse((string)e.NewValues["InfDatum"]).ToString(CultureInfo.InvariantCulture);
}
Versuch mal so das Datum zu setzen vllt. liegts nur am einem falsch konvertierten Datum.
Weil eigentlich, sollte er schon das Object casten können, außer man spezifiziert die Parameter einzeln.
(mMn ist das GridView eine eigene Wissenschaft für sich 😉)
Hey, das funktioniert prima.
Dann werde ich die Werte in den Views casten anstatt die Eigenschaften alle als Object zu deklarieren und intern zu casten.
Vielen Dank! 👍