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
Vous devez vous connecter pour publier un commentaire.
Il semble assez clair pour moi. Ici:
vous lier la
RowCommand
événement àshowResponses
. Et ici, dansshowResponses
, vous supposez que l'expéditeur est un bouton:L'expéditeur n'est pas un bouton - c'est l'affichage de la grille. Si vous souhaitez que l'argument de la commande, vous devez utiliser
GridViewCommandEventArgs.CommandArgument
.Merci. J'obtiens une erreur
No overload for 'showResponses' matches delegate 'System.EventHandler'
sur la ligne<asp:Button runat="server" ID="button1" CommandArgument='<%# Eval("QuestionnaireID") %>' OnClick="showResponses" text="Results"/>
Comment puis-je résoudre ce problème?Utiliser un autre gestionnaire pour l'événement, en fait. Vous pouvez bien voulez faire à la fois des gestionnaires d'appeler la même méthode unique après l'extraction de la
CommandArgument
de façon appropriée.Qui gestionnaire d'événement doit être utilisé? Il semble que la onRowCommand est en conflit avec le OnRowDeleting gestionnaire. Comment puis-je extraire les éléments pertinents
CommandArgument
? J'ai peu d'expérience avec le contrôle Gridview donc je ne sais pas qui de gestionnaire d'événement à utiliser.Je ne connais pas le détail de la date de l'événement qui est utilisé - mais vous savez déjà comment faire pour obtenir l'argument de la commande à partir d'un clic sur un bouton - parce que vous avez eu ce code avant. Vous ne pouvez pas utiliser le même code pour le bouton cliquez sur et le RowCommand événement.
OriginalL'auteur Jon Skeet
Ajouter un CommandName attribut à votre button1 dans le contrôle GridView.
Puis dans showResponses faire...
OriginalL'auteur Jagd
OriginalL'auteur boateng