簡體   English   中英

GridView RowCommand 事件未觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM