2010-12-20 7 views
1

例えば、データソースとしてObjectDataSourceを有するDetailsViewコントロールをとる。私は細部への参照をつかむだろうDetailsView.ItemUpdatedイベントにDataDataコントロールをObjectDataSourceイベントから参照するにはどうすればよいですか?

通常はsenderをキャストして表示します。それはObjectDataSource.ItemUpdatedイベント内のイベントを処理することが必要になる特定の状況で

DetailsView dv = (DetailsView)sender; 

。この場合、senderObjectDataSourceとなりました。私は何をすることができるようにしたいことは

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

のようにハードコードありえないクリーンなコードを書くである私は、ドキュメント上で見ても、いくつかの検索をしましたが、私は次のようないくつかのコードを記述する方法を見つけるcouldntの:

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

ご返信ありがとうございます。私がこれをやっているのは、チェックボックスを持つ 'TreeView'を持つカスタムの' UserControl'があるからです。それは、アイテムが表示されるべきコース/カテゴリをユーザが選択できるようにする。メインアイテムが更新された後に別のデータベーステーブルを更新できるように、このコントロールへの参照を取得する必要がある。私はそれにDetailsViewの名前をハードコーディングするだけで簡単に問題を解決しましたが、コードがあまり脆くないようにキャストできる.Parentまたは.NamingContainerのようなプロパティの種類があると思っていました。 – rtpHarry

+0

あなたのコードを見ずに答えるのは難しいです。とにかく、オブジェクトへの参照がある限り、そのプロパティにアクセスすることができます。ユーザーコントロールからはコントロールにアクセスでき、Webコントロールからは親(ページまたはユーザーコントロール)にアクセスできます。 –

0

は、あなたが提供される例を考える: あなたは

とにかく、あなたのコードは以下のようになりますあなたのビジネスロジックを見直し、それはどこかにそれがより理にかなって管理するようにしてくださいSomething_Hereに置き換えることができるもの。 DVにリンクされたODSであり、他の方法ではありません。また、1つのDataSourceを複数のDataBoundコントロールにリンクすることもできます。 私が知る限り、それは単に不可能です。