【问题标题】:Getting ID of SqlDataSource sender object获取 SqlDataSource 发送者对象的 ID
【发布时间】:2013-04-11 12:37:14
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • 解决方法,试试; SqlDataSourceView sqlds = (SqlDataSourceView)sender;

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


【解决方案1】:
SqlDataSource sqlds = (SqlDataSource)sender; 

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

SQLDataSourceView sqlds = (SQLDataSourceView)sender 

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

【讨论】:

  • System.Web.UI.WebControls? msdn.microsoft.com/en-GB/library/…
  • 抱歉我的错误我没有在 SQLDataSourceView 上使用 InnitCap。我现在找到了……但这似乎没有 ID 属性,那我怎么知道哪个数据源是发件人?
  • msdn 页面说它确实有 ID?老实说,我不确定其他情况
【解决方案2】:

正如@NDJ 所说,senderSQLDataSourceView。问题是如何获取SqlDataSource

SqlDataSource 被传递给 SQLDataSourceView 构造函数 (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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多