首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET GridView Button Click 事件簽名錯誤:必須符合 EventHandler 委托

     編輯:程式設計綜合問答

錯誤 “Button1_Click”的重載均與委托“System.EventHandler”不匹配 表示按鈕點擊處理函式簽名不符合 void Method(object sender, EventArgs e)。

正確簽名

protected void Button1_Click(object sender, EventArgs e) {
    Button btn = (Button)sender;
    GridViewRow row = (GridViewRow)btn.NamingContainer;
    int rowIndex = row.RowIndex;
    string id = GridView1.DataKeys[rowIndex].Value.ToString();
    // 業務邏輯...
}

關鍵點

  • **必須為 protected 或 public**,且參數固定為 (object sender, EventArgs e)。
  • 透過 sender 取得觸發按鈕,再用 NamingContainer 定位 GridViewRow,取得 RowIndex 與 DataKeys。
  • 若用 CommandName + RowCommand 事件,則在 GridView_RowCommand 統一處理,按鈕無需獨立 Click。

TemplateField 完整範例

<asp:TemplateField HeaderText="操作">
  <ItemTemplate>
    <asp:Button ID="btnEdit" runat="server" Text="編輯"
        CommandName="EditRow" CommandArgument='<%# Container.DataItemIndex %>' />
  </ItemTemplate>
</asp:TemplateField>
// 後端
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {
    if (e.CommandName == "EditRow") {
        int index = Convert.ToInt32(e.CommandArgument);
        // ...
    }
}

掌握 sender/NamingContainer 定位行與 CommandName/Argument 統一處理兩大模式,即可靈活應對 GridView 按鈕事件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved