GridView 內建 CommandField 可快速新增刪除功能,但缺乏確認機制,易造成使用者誤點刪除導致資料遺失。本文示範使用 TemplateField 搭配 JavaScript confirm() 實作刪除前確認。
<asp:TemplateField HeaderText="刪除" ShowHeader="False">
<ItemStyle ForeColor="Red" />
<ItemTemplate>
<asp:LinkButton ID="BtnDelete" runat="server"
CausesValidation="False"
CommandName="Delete"
Text="刪除">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="刪除" ShowHeader="False">
<ItemStyle ForeColor="Red" />
<ItemTemplate>
<asp:LinkButton ID="BtnDelete" runat="server"
CausesValidation="False"
CommandName="Delete"
Text="刪除"
OnClientClick="return confirm('確認要刪除此筆資料嗎?')">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
| 屬性 | 值 | 作用 |
|---|---|---|
CommandName | "Delete" | 觸發 GridView RowDeleting / RowDeleted 事件 |
CausesValidation | "False" | 略過頁面驗證控制項,避免驗證失敗阻擋刪除 |
OnClientClick | return confirm(...) | 點擊時先執行 JS 確認,取消返回 false 阻止 PostBack |
<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="False"
DataKeyNames="Id"
OnRowDeleting="gvData_RowDeleting">
<Columns>
<asp:BoundField DataField="Id" HeaderText="編號" />
<asp:BoundField DataField="Name" HeaderText="名稱" />
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<asp:LinkButton ID="BtnDelete" runat="server"
CausesValidation="False"
CommandName="Delete"
Text="刪除"
OnClientClick="return confirm('確定要刪除 【<%# Eval("Name") %>】 嗎?')">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void gvData_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
// 取得主鍵值
int id = Convert.ToInt32(gvData.DataKeys[e.RowIndex].Value);
// 執行刪除邏輯
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("DELETE FROM Table WHERE Id=@Id", conn))
{
cmd.Parameters.AddWithValue("@Id", id);
conn.Open();
cmd.ExecuteNonQuery();
}
// 重新繫結資料
BindGridView();
}
動態顯示資料名稱增強使用者辨識度:
OnClientClick='return confirm("確定刪除 【<%# Eval("Name").ToString().Replace("\"", "\\\"") %>】 嗎?")'
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
OnClientClick + confirm() | 零相依、簡單、相容性佳 | UI 樣式固定、無法自訂外觀 | 快速開發、內部系統 |
| jQuery UI Dialog | 美觀、可自訂、支援複雜互動 | 需引入 jQuery UI、額外 JS | 對外系統、重視 UX |
| Bootstrap Modal | 現代化、響應式、整合度高 | 需 Bootstrap 環境 | Bootstrap 專案 |
| SweetAlert2 | 極致美觀、動畫豐富、Promise API | 額外套件 | 現代 Web 應用 |