Laden...

Probleme mit ObjectDataSource und Update(Object)

Erstellt von Nuramir vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.151 Views
N
Nuramir Themenstarter:in
22 Beiträge seit 2008
vor 16 Jahren
Probleme mit ObjectDataSource und Update(Object)

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>

I
256 Beiträge seit 2005
vor 16 Jahren

Du musst die Update Parameter "einzeln" definieren

Die Klasse Person checkt der ODS nicht.

N
Nuramir Themenstarter:in
22 Beiträge seit 2008
vor 16 Jahren

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.

I
256 Beiträge seit 2005
vor 16 Jahren

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 😉)

N
Nuramir Themenstarter:in
22 Beiträge seit 2008
vor 16 Jahren

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! 👍