获取SqlDataSource发送方对象的ID

时间:2013-04-11 12:37:15

标签: c# asp.net sqldatasource sender-id

我正在尝试使用基于对象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”。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

SqlDataSource sqlds = (SqlDataSource)sender; 

导致您的问题 - 发件人必须是SQLDataSourceView。所以试试

SQLDataSourceView sqlds = (SQLDataSourceView)sender 

并根据需要更改其余代码。

答案 1 :(得分:0)

如@NDJ sender所述SQLDataSourceView。问题是如何获得SqlDataSource

SqlDataSource传递给SQLDataSourceView constuctor(MSDN: SqlDataSourceView Constructor)。问题是它只存储在私有字段_ownerreferencesource: SqlDataSourceView)中。因此有必要使用反射来获得它:

private string GetSqlDataSourceID(object sender)
{
    return (sender.GetType().GetField("_owner", BindingFlags.NonPublic | 
          BindingFlags.Instance).GetValue(sender) as SqlDataSource).ID;
}