J'ai un GridView qui ressemble à ceci:
<asp:GridView
ID="GridView1"
AllowPaging="true"
OnRowCommand="RowCommand"
OnPageIndexChanging="gridView_PageIndexChanging"
Runat="server">
<Columns>
...
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" ButtonType="Button" CommandName="ItemExport" CommandArgument='<%# Eval("EXPORT") %>'
Text="Export" runat="server" />
</ItemTemplate>
</asp:TemplateField>
...
</Columns>
</asp:GridView>
Voici RowCommand
:
protected void RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ItemExport")
{
// etc.
}
}
Cliquer sur le bouton ne déclenche pas du tout l'événement RowCommand
. Cependant, RowCommand
se déclenche lorsque je clique sur un index de page dans le pager de GridView.
Vous devez non lier votre grille sur les publications dans Page_Load, uniquement en cas de modification modifiant le mode de chargement de la grille (par exemple, le tri, la pagination) et uniquement dans les gestionnaires d'événements appropriés.
Autre raison possible: avez-vous désactivé ViewState quelque part?
Je viens d'avoir un collègue qui a rencontré le même problème; Cela est dû au fait que l'attribut onrowcommand=
n'a pas été défini dans l'élément asp:GridView
. Cela doit être défini sur le nom du gestionnaire qui gérera l'événement.
... juste au cas où quelqu'un aurait le même problème!
Utilisez CausesValidation="false"
dans la balise button. Cela peut résoudre le problème.
Placez la grid.Databind()
dans la if (!IsPostBack)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
grid.DataBind();
}
}
si votre code ressemble à ceci:
protected void Page_Load(object sender, EventArgs e)
{
BindGrid(dgv);
if (!IsPostBack)
{
}
}
mis dans le BindGrid () à l'intérieur de la ligne isposback {}
Vous pouvez également vérifier le HttpContext.Current.Request.Form ["__ EVENTTARGET"] et s’il se termine par l’ID du contrôle, relier le GridView et utiliser Page.FindControl avec le target event pour trouver le contrôle qui a déclenché l’événement
J'ai essayé les réponses ci-dessus et je ne pouvais toujours pas récupérer mon message. En fin de compte être un ID unique problème. J'avais deux <ItemTemplate>
avec des boutons qui avaient les mêmes identifiants. (Dans différentes vues de grille. Ma deuxième était dans un contrôle utilisateur)
Le fait de changer le <asp:Button ID="" />
en un identifiant unique a résolu le problème de post-traitement pour moi.
Je pensais que je publierais pour quelqu'un d'autre qui aurait essayé les autres options sans succès.
Mon problème était requiredfieldvalidator
La solution à ce problème était la suivante: je le désactive dès la publication, puis je le réactive après la commande row.