承接第 8 節(GridView 顯示與刪除),本節實作 GridView 的編輯/更新功能,包含模板欄位轉換、輸入驗證、刪除確認對話框,展示 GridView 進階應用。
public static void modifynews(newsclass news) {
using (SqlConnection cn = dbconn.GetConnection()) {
cn.Open();
string sql = "UPDATE news SET title = @title, contents = @contents WHERE ID = @id";
using (SqlCommand cmd = new SqlCommand(sql, cn)) {
cmd.Parameters.AddWithValue("@title", news.Title);
cmd.Parameters.AddWithValue("@contents", news.Contents);
cmd.Parameters.AddWithValue("@id", news.ID);
cmd.ExecuteNonQuery();
}
}
}
modifynews(newsclass) 方法DataKeyNames="ID"ControlToValidate:標題輸入框 IDErrorMessage:標題不可為空ValidationGroup:與更新按鈕一致OnClientClick="return confirm('確認要刪除嗎?');"

1. 使用者點擊「編輯」連結 ↓ 2. GridView 進入編輯模式,該列轉為 EditItemTemplate ↓ 3. 使用者修改資料,點擊「更新」 ↓ 4. 客戶端驗證(RequiredFieldValidator 等) ↓ 5. 通過 → 觸發 ObjectDataSource Updating 事件 ↓ 6. 呼叫 modifynews() 更新資料庫 ↓ 7. GridView 重新繫結,恢復顯示模式
| 現象 | 原因 | 解決 |
|---|---|---|
| 更新不生效 | DataKeyNames 未設定或錯誤 | 確認 DataKeyNames="ID" 與資料表主鍵一致 |
| 驗證不觸發 | ValidationGroup 不一致 | 驗證控制項與更新按鈕設定相同 ValidationGroup |
| 刪除無反應 | ObjectDataSource DeleteMethod 未設定 | 設定 DeleteMethod="deletenews" 並確認參數名稱 |
| 編輯後版面跑版 | EditItemTemplate 寬度未控制 | 為輸入框設定 CSS 寬度或 style |
| 特性 | GridView (Web Forms) | Repeater + JS | MVC/Web API + Grid.js |
|---|---|---|---|
| 開發速度 | 快(拖拉元件) | 中 | 中 |
| HTML 控制力 | 低(ViewState、ID 混亂) | 高 | 高 |
| 客戶端互動 | 依賴 PostBack | AJAX 友善 | AJAX 原生 |
| 測試性 | 難(事件耦合) | 易 | 易 |
| 適用場景 | 內部管理、快速原型 | 客製化需求高 | 現代 Web 應用 |
GridView 透過 TemplateField、驗證控制項、客戶端腳本,能實作功能完整的資料編輯介面。雖然 Web Forms 架構在現代開發中較少用於新專案,但維護既有系統時,熟練掌握 GridView 進階技巧仍具實務價值。