Asp.net 如何获取触发onSelecting事件的数据源的datasourceID?

Asp.net 如何获取触发onSelecting事件的数据源的datasourceID?,asp.net,sqldatasource,event-handling,onselect,Asp.net,Sqldatasource,Event Handling,Onselect,我在asp.net页面上有两个不同的SqlDataSource,它们都会触发相同的onSelecting事件处理程序。这是因为事件处理程序中的相同代码可以应用于所有数据源,这些数据源本质上是动态生成查询中的过滤器。然而,现在我有了另一个数据源,它仍然可以使用大部分代码,但需要稍微不同地处理。如果我可以引用触发我尝试过的事件的数据源ID,我可以很容易地做到这一点,但这似乎是不可能的。以下是我最初尝试做的事情: protected void sdsTable_Selecting(object sen

我在asp.net页面上有两个不同的SqlDataSource,它们都会触发相同的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属性,但这是不同的。有人知道在处理选择事件时是否可以获取触发该事件的数据源的ID吗?如果是这样,你能提供一个如何做到这一点的例子吗


谢谢

我没有尝试过这个方法,但SqlDataSource有方法,也许您可以获取数据源的视图名称,并检查哪个视图具有当前SqlDataSourceView.Name。

我没有尝试过这个方法,但SqlDataSource有方法,也许您可以获取数据源的视图名称,并检查哪个视图具有当前名称SqlDataSourceView.Name.

这有点老套,但它可以工作。为每个SqlDataSources指定一个未使用的SelectParameter,该参数的名称相同,但默认值不同。例如,可能有:

<asp:Parameter DefaultValue="Value1" Name="sdsName" Type="String" />
<asp:Parameter DefaultValue="Value2" Name="sdsName" Type="String" />

希望有人能找到更好的解决方案。

这有点老套,但确实有效。为每个SqlDataSources指定一个未使用的SelectParameter,该参数的名称相同,但默认值不同。例如,可能有:

<asp:Parameter DefaultValue="Value1" Name="sdsName" Type="String" />
<asp:Parameter DefaultValue="Value2" Name="sdsName" Type="String" />

这里希望有人有更好的解决方案。

感谢您的输入:该方法受到保护,因此我认为为了能够调用它,我需要创建一种新类型的控件,该控件继承sqldatasource控件,并允许引用该方法。我有一种预感,SqlDataSourceView.Name公共属性可能会调用GetView,这也是一个受保护的方法。问题是,每个附加到selecting事件的数据源都会返回该属性的DefaultView。。。我不确定是否有办法使SqlDataSource的视图名称唯一……感谢您的输入:该方法受到保护,因此我认为为了能够调用它,我需要创建一种新类型的控件,该控件继承SqlDataSource控件,并允许引用该方法。我有一种预感,SqlDataSourceView.Name公共属性可能会调用GetView,这也是一个受保护的方法。问题是,每个附加到selecting事件的数据源都会返回该属性的DefaultView。。。我不确定是否有办法使SqlDataSource的视图名称唯一。。。