1

我正在尝试根据对象(发送者)的 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”类型。

我究竟做错了什么?

4

2 回答 2

0
SqlDataSource sqlds = (SqlDataSource)sender; 

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

SQLDataSourceView sqlds = (SQLDataSourceView)sender 

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

于 2013-04-11T12:39:55.257 回答
0

正如@NDJ 所说,senderSQLDataSourceView. 问题是如何获得SqlDataSource

SqlDataSource传递给构造函数SQLDataSourceViewMSDN:SqlDataSourceView 构造函数)。问题是它只存储在私有字段_ownerreferencesource:SqlDataSourceView)中。所以需要使用反射来获取:

private string GetSqlDataSourceID(object sender)
{
    return (sender.GetType().GetField("_owner", BindingFlags.NonPublic | 
          BindingFlags.Instance).GetValue(sender) as SqlDataSource).ID;
}
于 2018-04-18T08:57:27.440 回答