Frage

Ich verwende eine FormView mit einer ObjectDataSource.Wenn auf die Schaltfläche „Speichern“ geklickt wird, möchte ich das datengebundene Objekt ändern, bevor es auf die ObjectDataSources-Update-Methode festgelegt wird.

Ich habe das Updating-Ereignis von FormView sowie das Updating-Ereignis der Objektdatenquelle ausprobiert, kann aber nicht herausfinden, wie ich auf das datengebundene Objekt zugreifen kann.FormView.DataItem ist in diesen Ereignissen null.

Oder mit anderen Worten: Ich möchte das DataItem abfangen und ändern, bevor es an die ObjectDataSource UpdateMethod übergeben wird.

Um etwas detaillierter zu erläutern, warum ich dies tun möchte: Es gibt einige Werte im Formular, die nicht mit der integrierten Funktionalität datengebunden werden können.Eines der Steuerelemente ist die Kontrollkästchenliste.Ich verwende das DataBinding-Ereignis, um die Prüfungen auszufüllen, aber jetzt brauche ich auch eine Möglichkeit, mein Objekt zu aktualisieren, um die Formularwerte widerzuspiegeln.Es gibt auch andere Kontrollen mit ähnlichen Situationen.

War es hilfreich?

Lösung

Warum schreiben Sie nicht einfach Ihr eigenes Geschäftsobjekt (auch bekannt als ObjectDataSource) und wickeln das ursprüngliche ObjektdataSource -Objekt ein? Sie können dann alles abfangen, was Sie wollen, und es auf dem Weg zu der Speichernmethode des ursprünglichen Objektdatasource -Objekts ändern.

Andere Tipps

Ich weiß, dass dies eine alte Frage ist, aber ich hatte das gleiche Problem und habe die Antwort gefunden, nach der Bob meiner Meinung nach sucht.

Die Lösung besteht darin, das ObjectDataSource-Aktualisierungsereignis im Webformular zu verwenden.Das Updating-Ereignis enthält das ObjectDataSourceMethodEventArgs-Objekt als Parameter.Die ObjectDataSourceMethodEventArgs-Klasse enthält eine Eigenschaft namens „InputParameters“, mit der Sie auf das Datenobjekt zugreifen und den Inhalt ändern können, bevor die Aktualisierung erfolgt.Sie müssen zuerst das InputParameters-Objekt in einen OrderedDictionary-Typ konvertieren (vollständiger Namespace ist System.Collections.Specialized.OrderedDictionary).

Es sieht ungefähr so ​​aus:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

Dataitem ist nur bei der Datenbank verfügbar.
Die Daten werden dann an Steuerelemente in Ihrer Formenansicht gebunden.
Verwenden Sie myFormView.findControl (String -ID), um vor dem Aktualisieren auf gebundene Werte zuzugreifen.

Wenn die Zwei-Wege-Datenbank nicht für Sie funktioniert, sollten Sie Ihr Objekt einrichten, die Eigenschaften manuell bevölkern und dann die Änderungen aktualisieren oder begehen.

Da Sie sich im Aktualisierungsereignis befinden, ist formView.dataitem null, da noch keine Datenbindung aufgetreten ist. Sie müssen über das Formularsteuerung, das Ihre interessierenden Daten enthält, auf die Daten zugreifen.

Versuchen Sie, Ihre Datenänderung während des Ondatabinding -Ereignisses der relevanten Kontrolle anzuwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top