Ho scritto un metodo che elimina le righe da un aspid Gridview quando si fa clic sul pulsante Elimina e un altro metodo per quando il pulsante di modifica è cliccato. Entrambi i pulsanti Modifica ed Elimina fanno parte dei controlli integrati di GridView.Impossibile trasmettere l'oggetto di tipo System.Web.UI.WebControls.GridView in ASP.NET
Tuttavia quando premo questi pulsanti (modifica/cancella) viene generata un'eccezione. Impossibile eseguire il cast dell'oggetto di tipo 'System.Web.UI.WebControls.GridView' per digitare 'System.Web.UI.WebControls.Button'. che è puntato sulla linea
Button btn = (Button)sender;
Il problema qui è che questa linea non è correlato a uno dei metodi di modificare o eliminare. È correlato al pulsante asp in un'altra colonna e per questo motivo sono perso. Come posso risolvere questo problema? Qual è la causa del conflitto tra OnRowDeleting e OnRowEditing con il metodo showResponses?
Ecco l'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>
E qui è il codice dietro:
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");
}
Qualsiasi aiuto sarebbe molto apprezzato.
Questa è la risposta dell'uomo – Mubarek
Grazie. Ricevo un errore 'Nessun sovraccarico per 'showResponses' corrisponde a delegato 'System.EventHandler'' sulla riga' 'Come posso risolvere questo? –
HGomez90
@Rupert: utilizzare un gestore diverso per quell'evento, in pratica. Potresti voler fare in modo che entrambi i gestori chiamino nello stesso singolo metodo dopo aver estratto correttamente il "CommandArgument". –