我在 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
}
这不起作用,因为 sender 属于 SqlDataSourceView 类型,并且尝试将 sender 强制转换为 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?如果是这样,您能否举例说明如何执行此操作?
谢谢!