无法在ASP.NET中强制转换System.Web.UI.WebControls.GridView类型的对象

我编写了一个方法,当单击删除按钮时,从我的asp.net Gridview中删除行,以及单击编辑按钮时的另一种方法。 “编辑”和“删除”按钮都是内置gridview控件的一部分。

但是当我按下这些按钮(编辑/删除)并抛出exception时。 无法将类型为“System.Web.UI.WebControls.GridView”的对象强制转换为“System.Web.UI.WebControls.Button”。 这是指着这条线

Button btn = (Button)sender; 

这里的问题是该行与编辑或删除方法无关。 它与另一列中的asp按钮有关,因此我迷路了。 我该如何解决这个问题? 什么导致OnRowDeleting和OnRowEditing与showResponses方法冲突?

这是aspx

       <asp:Button runat="server" ID="button1" CommandArgument='' OnClick="showResponses" text="Results"/>      

以下是代码背后的代码:

 protected void gvShowQuestionnaires_RowDeleting(object sender, GridViewDeleteEventArgs e) { int questionnaireID = (int)gvShowQuestionnaires.DataKeys[Convert.ToInt32(e.RowIndex)].Value; GetData.DeleteQuestionnaire(questionnaireID); gvShowQuestionnaires.DataSource = DT; gvShowQuestionnaires.DataBind(); } protected void gvShowQuestionnaires_RowEdit(object sender, GridViewEditEventArgs e) { string id = gvShowQuestionnaires.Rows[e.NewEditIndex].Cells[0].Text; Session["qID"] = id; Response.Redirect("~/members/edit_questionnaire.aspx"); } protected void showResponses(object sender, EventArgs e) { Button btn = (Button)sender; string id = btn.CommandArgument.ToString(); Session["qID"] = id; Response.Redirect("~/members/questionnaire_responses.aspx"); } 

任何帮助将非常感激。

对我来说似乎相当清楚。 这里:

  

RowCommand事件绑定到showResponses 。 在这里,在showResponses ,您假设发件人是一个按钮:

 protected void showResponses(object sender, EventArgs e) { Button btn = (Button)sender; string id = btn.CommandArgument.ToString(); Session["qID"] = id; Response.Redirect("~/members/questionnaire_responses.aspx"); } 

发件人不是按钮 – 它是网格视图。 如果需要命令参数,则应使用GridViewCommandEventArgs.CommandArgument

 protected void showResponses(object sender, GridViewCommandEventArgs e) { Session["qID"] = e.CommandArgument; Response.Redirect("~/members/questionnaire_responses.aspx"); } 

将CommandName属性添加到GridView中的button1。

  

然后在showResponses中这样做……

 protected void showResponses(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Button1") { Session["qID"] = e.CommandArgument; Response.Redirect("~/members/questionnaire_responses.aspx"); } } 
 var btnSender = (Button)e.CommandSource;