Impossible de convertir l'objet de type System.Web.L'INTERFACE utilisateur.Contrôles webcontrols.GridView dans ASP.NET

J'ai écrit une méthode qui supprime les lignes de mon un asp.net Gridview lorsque le bouton supprimer n'est cliqué et une autre méthode pour quand le bouton modifier est cliqué.
Les deux boutons Modifier et Supprimer sont une partie de la construction dans le contrôle gridview.

Cependant lorsque j'appuie sur ces touches (modifier/supprimer)et l'exception est levée.
Impossible de convertir l'objet de type 'System.Web.L'INTERFACE utilisateur.Contrôles webcontrols.GridView "pour le" type de Système.Web.L'INTERFACE utilisateur.Contrôles webcontrols.Bouton". qui est pointé à la ligne

Button btn = (Button)sender;

Le problème ici est que cette ligne n'est pas les modifier ou de supprimer des méthodes. Elle est liée à l'asp bouton dans une autre colonne, et pour cette raison que je suis perdu. Comment puis-je résoudre ce problème? Ce qui provoque à la fois la OnRowDeleting et OnRowEditing conflit avec la showResponses méthode?

Voici le aspx

<asp:GridView runat="server" ID="gvShowQuestionnaires" HeaderStyle-CssClass="table_header" CssClass="view" AlternatingRowStyle-CssClass="alt" AlternatingRowStyle-BackColor="#f3f4f8" AutoGenerateColumns="False" 
                DataKeyNames='QuestionnaireID' OnRowDeleting="gvShowQuestionnaires_RowDeleting" OnRowEditing="gvShowQuestionnaires_RowEdit" FooterStyle-CssClass="view_table_footer" OnRowCommand="showResponses"> 
    <Columns>
        <asp:BoundField DataField="QuestionnaireID" HeaderText="ID" HeaderStyle-Width="80px" ItemStyle-CssClass="bo"></asp:BoundField>
        <asp:BoundField DataField="QuestionnaireName" HeaderText="Questionnaire Name" />           
        <asp:TemplateField HeaderText="Results" HeaderStyle-Width="150px">
            <ItemTemplate>
               <asp:Button runat="server" ID="button1" CommandArgument='<%# Eval("QuestionnaireID") %>' OnClick="showResponses" text="Results"/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField HeaderText="Options" ShowDeleteButton="True" ShowEditButton="true" EditText="Edit"></asp:CommandField>
    </Columns> 
</asp:GridView>

Et voici le code derrière:

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");            
}

Toute aide serait appréciée.

OriginalL'auteur HGomez | 2012-01-18