錯誤 “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。<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 按鈕事件。