[英]GridView RowCommand event not firing
我有一個看起來像這樣的 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
。
您不能在 Page_Load 中的回發上綁定您的網格,只有當某些更改導致網格重新加載數據(fe Sorting,Paging)並且僅在適當的事件處理程序中。
另一個可能的原因:您是否在某處禁用了 ViewState?
在按鈕標簽中使用CausesValidation="false"
。 它可以解決問題。
我剛有一個同事遇到了同樣的問題; 他的原因是沒有在asp:GridView
元素中設置onrowcommand=
屬性。 這應該設置為將處理事件的處理程序的名稱。
...以防萬一有人有同樣的問題!
把grid.Databind()
放在if (!IsPostBack)
里面
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
grid.DataBind();
}
}
如果你的代碼是這樣的:
protected void Page_Load(object sender, EventArgs e)
{
BindGrid(dgv);
if (!IsPostBack)
{
}
}
將BindGrid()
放在!isPostBack
塊中
嘗試了上述答案,但仍然無法回帖。 最終成為唯一 ID問題。 我有兩個<ItemTemplate>
帶有相同 ID 的按鈕。 (在不同的網格視圖中。我的第二個在用戶控件中)
將<asp:Button ID="" />
更改為唯一 ID 為我解決了回發問題。
只是想我會為其他嘗試其他選項但沒有運氣的人發帖。
您還可以檢查 HttpContext.Current.Request.Form["__EVENTTARGET"] ,如果它以控件的 ID 結尾,則重新綁定 GridView 並使用帶有事件目標的 Page.FindControl 來查找觸發事件的控件
我的問題是requiredfieldvalidator
解決方案是:我在回發時禁用它,然后在行命令后重新啟用它。
他們都做了但一無所獲然后發現了這一點:onrowcommand="GridView1_RowCommand" 在 html 的 GridView1 定義行上。
我通過從 GridView 中刪除所有事件處理程序,然后重建代碼,然后一次將它們添加回一個來修復我的這個問題版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.