2010-12-20 4 views
1

Nehmen Sie zum Beispiel eine DetailsView Steuerung mit einer ObjectDataSource als Datenquelle.Wie referenziere ich das datengebundene Steuerelement von einem ObjectDataSource-Ereignis?

Normalerweise im DetailsView.ItemUpdated Ereignis sehe ich einen Verweis auf die Details greifen würde durch die sender Gießen:

DetailsView dv = (DetailsView)sender; 

In bestimmten Situationen wird es notwendig, die Veranstaltung innerhalb der ObjectDataSource.ItemUpdated Ereignis zu behandeln. In diesem Fall ist sender jetzt vom Typ ObjectDataSource. Was ich will, ist zu tun, um der Lage sein, sauberen Code schreiben, der wie

Label label1 = DetailsView1.FindControl("Label1"); 

fest einprogrammiert isnt ich über die Dokumentation geschaut und auch einige Recherchen haben aber konnte nicht finden, wie ich einige Code wie folgt schreiben würde:

protected void ObjectDataSource1_Inserted(object sender, ObjectDataSourceStatusEventArgs e) 
{ 
    ObjectDataSource ods = (ObjectDataSource)sender; 
    DetailsView dv = (DetailsView)ods.SOMETHING_HERE; 
} 

Weiß jemand, was ich in das SOMETHING_HERE oben in dem Schnipsel setzen sollte?

Antwort

0

Das passiert, weil das "OnInserted" -Ereignis ein Ereignis sein soll, das die Werte eines Rückgabewerts oder Ausgabeparameters untersucht oder ermittelt, ob eine Ausnahme ausgelöst wurde, nachdem eine Insert-Operation abgeschlossen wurde. Der Rückgabewert, die Ausgabeparameter und die Ausnahmebehandlungseigenschaften sind über das ObjectDataSourceStatusEventArgs-Objekt verfügbar, das dem Ereignis zugeordnet ist.

Was Sie hier tun können, ist einfach ObjectDataSource.select() aufrufen, die die Ansicht in diesem Fall zurückgibt, aber ich denke nicht, dass es eine gute Wahl ist. Sie sollten Sie Business-Logik überprüfen und versuchen, es irgendwo zu verwalten es mehr Sinn

Wie auch immer Ihr Code wie folgt aussehen sollte macht:

ObjectDataSource ods = YourDataSource.select(); 
DetailsView dv = (DetailsView)ods; 
+0

Vielen Dank für Ihre Antwort. Der Grund, dass ich das mache, ist, weil ich eine benutzerdefinierte 'UserControl' geschrieben habe, die eine' TreeView' mit Checkboxen hat. Es erlaubt dem Benutzer, Kurse/Kategorien zu wählen, in denen das Objekt angezeigt werden soll. Ich muss einen Verweis auf dieses Steuerelement erhalten, damit ich eine andere Datenbanktabelle aktualisieren kann, nachdem das Hauptelement aktualisiert wurde. Ich habe das Problem einfach dadurch gelöst, dass ich den DetailsView-Namen einfach fest codierte, aber ich dachte, dass es eine Art von Eigenschaft wie .Parent oder .NamingContainer geben könnte, sodass der Code nicht so spröde ist. – rtpHarry

+0

Es ist schwer zu beantworten, ohne auf Ihren Code zu schauen. Wie auch immer es einen Verweis auf ein Objekt gibt, auf dessen Eigenschaften Sie zugreifen können: Sie können von der Benutzersteuerung auf die Steuerelemente zugreifen, die es enthält, und von dem Webcontrol können Sie auf das übergeordnete Element (Seite oder Benutzersteuerelement) zugreifen. –

0

Am Beispiel Sie zur Verfügung gestellt, das glaube ich nicht, dass es alles, was du für Something_Here ersetzen kannst. Es ist der ODS mit DV verbunden und nicht umgekehrt. Auch eine DataSource kann mit mehreren DataBound Controls verknüpft werden. So weit ich weiß ist es einfach nicht möglich.