2

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 を取得できるかどうかは誰にもわかりますか? もしそうなら、これを行う方法の例を提供できますか?

ありがとう!

4

2 に答える 2

0

私はこれを試したことはありませんが、SqlDataSource にはGetViewNames()メソッドがあり、DataSources の ViewNames を取得して、どれが現在の .xml を持っているかを確認できますSqlDataSourceView.Name

于 2011-03-11T02:23:28.120 に答える