asp.netページにいくつかの異なるsqldatasourcesがあり、それらはすべて同じonSelectingイベントハンドラーを起動します。これは、イベント ハンドラーの同じコードをすべてのデータ ソースに適用できるためです (これにより、基本的に、クエリでフィルターが動的に生成されます)。ただし、コードの大部分を引き続き使用できる別のデータソースがありますが、少し異なる方法で処理する必要があります。イベントを発生させているデータソースの ID を参照できれば (私が試しました)、これを非常に簡単に行うことができますが、これは可能ではないようです。これが私が最初にやろうとしたことです:
protected void sdsTable_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
SqlDataSource sds = sender as SqlDataSource;
string dsID = sds == null ? "" : sds.ID;
if (dsID == "aDataSourceID")
{
//do this
}
else
{
//do that
}
//more code
}
送信者のタイプが SqlDataSourceView であり、SqlDataSource が null を返すときに送信者をキャストしようとしたため、これは機能しませんでした。そこで、SqlDataSourceView に変更しました。
protected void sdsTable_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
SqlDataSourceView sds = sender as SqlDataSourceView;
string dsID = sds == null ? "" : sds.Name; //Tried Name property because ID isn't available
if (dsID == "aDataSourceID")
{
//do this
}
else
{
//do that
}
//more code
}
しかし、これはまだ機能しません。SqlDataSourceView には、現在イベントを発生させているデータソースの datasourceID を提供するプロパティがないようです。SqlDataSourceView.Name プロパティがありますが、これは別のものです。そのイベントが処理されているときに Selecting イベントを発生させる DataSource の ID を取得できるかどうかは誰にもわかりますか? もしそうなら、これを行う方法の例を提供できますか?
ありがとう!