我正在尝试使用基于对象ID(发件人)的switch语句。
protected void SqlDataSource_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
int count = e.AffectedRows;
SqlDataSource sqlds = (SqlDataSource)sender;
switch (sqlds.ID)
{
case "sqldsPTY":
lblPTYCount.Text = "(" + count.ToString() + ")";
break;
case "sqldsINC":
lblINCCount.Text = "(" + count.ToString() + ")";
break;
...
}
}
但我得到例外:
System.InvalidCastException:无法将类型为“System.Web.UI.WebControls.SqlDataSourceView”的对象强制转换为“System.Web.UI.WebControls.SqlDataSource”。
我做错了什么?
答案 0 :(得分:0)
SqlDataSource sqlds = (SqlDataSource)sender;
导致您的问题 - 发件人必须是SQLDataSourceView。所以试试
SQLDataSourceView sqlds = (SQLDataSourceView)sender
并根据需要更改其余代码。
答案 1 :(得分:0)
如@NDJ sender
所述SQLDataSourceView
。问题是如何获得SqlDataSource
。
SqlDataSource
传递给SQLDataSourceView
constuctor(MSDN: SqlDataSourceView Constructor)。问题是它只存储在私有字段_owner
(referencesource: SqlDataSourceView)中。因此有必要使用反射来获得它:
private string GetSqlDataSourceID(object sender)
{
return (sender.GetType().GetField("_owner", BindingFlags.NonPublic |
BindingFlags.Instance).GetValue(sender) as SqlDataSource).ID;
}