我有一个看起来像这样的GridView:
<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>
以下是RowCommand
:
protected void RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ItemExport")
{
// etc.
}
}
单击该按钮根本不会触发RowCommand
事件。但是,当我在GridView的寻呼机中单击页面索引时会触发RowCommand
。
答案 0 :(得分:48)
只有在更改导致网格重新加载数据(例如,排序,分页)并且仅在相应的事件处理程序中更改某些内容时,您必须不绑定Page_Load中的回发网格。
另一个可能的原因:您是否在某处禁用了ViewState?
答案 1 :(得分:4)
我刚遇到一位遇到同样问题的同事;他的原因是onrowcommand=
元素未设置asp:GridView
属性。这应该设置为将处理事件的处理程序的名称。
...万一有人有同样的问题!
答案 2 :(得分:4)
在按钮标记中使用CausesValidation="false"
。它可以解决问题。
答案 3 :(得分:3)
将grid.Databind()
放在if (!IsPostBack)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
grid.DataBind();
}
}
答案 4 :(得分:2)
如果您的代码是这样的:
protected void Page_Load(object sender, EventArgs e)
{
BindGrid(dgv);
if (!IsPostBack)
{
}
}
将BindGrid()
放在!isPostBack
块
答案 5 :(得分:1)
您还可以检查HttpContext.Current.Request.Form [“__ EVENTTARGET”],如果它以控件的ID结尾,重新绑定GridView并使用Page.FindControl和事件目标来查找触发该控件的控件事件
答案 6 :(得分:1)
我的问题是requiredfieldvalidator
解决方案是:我在回发后禁用它,然后在行命令后重新启用它。
答案 7 :(得分:1)
尝试了上述答案,但仍无法回复。最终成为唯一ID 问题。我有两个<ItemTemplate>
按钮具有相同的ID。 (在不同的网格视图中。我的第二个是在用户控件中)
将<asp:Button ID="" />
更改为唯一ID可解决我的回复问题。
以为我会为任何其他没有运气尝试其他选项的人发帖。
答案 8 :(得分:0)
全部都找到了,却无所获,然后发现了这一点:html的GridView1定义行上的onrowcommand =“ GridView1_RowCommand”。
答案 9 :(得分:0)
我通过从GridView中删除所有事件处理程序,然后重新构建代码,然后一次又将它们重新添加进来,解决了该问题的版本。