2010-12-20 25 views
1

以一個DetailsView控件爲例,其ObjectDataSource作爲其數據源。如何從ObjectDataSource事件引用數據綁定控件?

通常在DetailsView.ItemUpdated事件中,我會抓住的細節參考視圖通過鑄造sender

DetailsView dv = (DetailsView)sender; 

在某些情況下有必要處理ObjectDataSource.ItemUpdated事件中的事件。在這種情況下sender現在是ObjectDataSource類型。我希望能夠做的是編寫乾淨的代碼,心不是硬編碼像

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

我看着的文件過來,也做了一些搜索,但無法找到我怎麼會寫像下面的一些代碼:

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

有沒有人知道我應該放在SOMETHING_HERE上面的代碼片段中?

回答

0

發生這種情況是因爲「OnInserted」事件被認爲是一個事件,它檢查返回值或輸出參數的值,或者確定插入操作完成後是否拋出異常。返回值,輸出參數和異常處理屬性可從與事件關聯的ObjectDataSourceStatusEventArgs對象中獲取。

你可以在這裏做的只是打電話ObjectDataSource.select(),在這種情況下返回視圖,但我不認爲這是一個好的選擇。 您應該檢查你的業務邏輯和嘗試管理它的地方,它更有意義

反正你的代碼看起來應該像下面的:

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

感謝您的回覆。我這樣做的原因是因爲我有一個自定義的'UserControl',它有一個帶有複選框的'TreeView'。它允許用戶選擇項目應顯示的課程/類別。我需要獲得對此控件的引用,以便在更新主項目後更新不同的數據庫表格。通過對DetailsView名稱進行硬編碼,我很容易解決了這個問題,但我認爲可能存在一些像.Parent或.NamingContainer這樣的屬性類型,我可以將其轉換爲代碼,因此代碼不會太脆弱。 – rtpHarry 2010-12-20 13:56:56

+0

不看代碼就很難回答。無論如何,只要有一個對象的引用可以訪問它的屬性:通過usercontrol,你可以訪問它所包含的控件,從webcontrol中你可以訪問父級(頁面或用戶控件)。 – 2010-12-20 14:26:57

0

考慮到你所提供的例子,我不認爲有任何你可以替換爲Something_Here的東西。這是與DV相關的ODS,而不是其他方式。另外一個DataSource可以鏈接到多個DataBound控件。 所以據我所知這根本不可能。

相關問題