共用方式為


在 GridView Web 伺服器控制項中修改資料

更新:2007 年 11 月

GridView 控制項具有內建功能,可以讓使用者編輯或刪除記錄,而不需要撰寫程式。您可以使用事件和範本,自訂 GridView 控制項的編輯或刪除功能。

啟用內建編輯功能

您可以利用下列任何一種方式,啟用 GridView 控制項內建的編輯或刪除功能:

編輯如何在 GridView 控制項中運作

GridView 控制項可以顯示使用者介面 (UI),讓使用者能夠編輯個別資料列的內容。‏通常可編輯的方格 (Grid) 都會包含具有按鈕或連結的資料行,使用者只要按一下這個按鈕或連結,即可將資料列變成編輯模式 (根據預設,按鈕標題為 "Edit")。

當使用者儲存變更時,GridView 控制項會將變更和主索引鍵資訊傳遞給由 DataSourceID 屬性所辨識的資訊來源控制項,這個控制項會叫用 (Invoke) 適當的更新作業。例如,SqlDataSource 控制項會使用變更的資料當做參數值,執行 SQL Update 陳述式。ObjectDataSource 控制項會呼叫其更新方法,將變更當做參數傳遞給方法呼叫。

GridView 控制項會將值傳遞給資料來源,以在三個字典集合中執行更新或刪除作業:Keys 字典、NewValues 字典和 OldValues 字典。您可以使用已傳遞給 GridView 控制項之更新或刪除事件的引數,來存取每一個字典。

Keys 字典包含欄位的名稱和值,這些欄位是專門用來辨識要更新或刪除的記錄,而這個字典一律會包含索引鍵欄位的原始值。若要指定哪些欄位將置於 Keys 字典,請將 DataKeyNames 屬性設定為以逗號分隔的欄位名稱清單,這些欄位名稱表示您資料的主索引鍵。DataKeys 集合中會自動填入與針對 DataKeyNames 屬性所指定之欄位相關聯的值。

注意事項:

DataKeyNames 屬性中指定的欄位原始主索引鍵值會儲存在檢視狀態中。如果主索引鍵值包含敏感性資訊,您應該將頁面的 ViewStateEncryptionMode 屬性設定為 Always,加密檢視狀態內容。

NewValues 字典包含輸入控制項中正在編輯之資料列的目前值。OldValues 字典包含索引鍵欄位以外的原始值,索引鍵欄位儲存在 Keys 字典中。

資料來源控制項會將來自 Keys、NewValues 和 OldValues 字典的值,當做更新或刪除命令的參數使用。如需如何根據建立用於繫結值的字典,建立資料來源控制項參數的詳細資訊,請參閱 資料來源控制項如何建立資料繫結欄位的參數

將這些字典傳遞給資料來源之前,您可以先處理 RowUpdatingRowDeleting 事件,來檢查或自訂任一個字典的內容。在完成更新或刪除之後,GridView 控制項會引發它的 RowUpdatedRowDeleted 事件。這些事件可讓您執行如完整性檢查這類的查詢後邏輯。

在完成更新或刪除且引發所有事件之後,GridView 控制項會重新繫結至資料來源控制項,以顯示更新的資料。

注意事項:

GridView 控制項中可更新欄位的原始值會儲存在 ViewState 中。如果含有可更新 GridView 控制項的 ASP.NET 網頁上已停用 ViewState,則開放式並行存取 (Optimistic Concurrency) 檢查就無法使用當 GridView 控制項首次繫結至資料來源時所擷取之可更新和主索引鍵欄位的原始值。當頁面回傳以便執行更新或刪除時,就會擷取資料庫中目前的值,當做 GridView 控制項中可更新和主索引鍵欄位的原始值,因為 ViewState 中沒有儲存任何值。然後就會使用這些原始值,執行更新或刪除作業。如果自從 GridView 控制項首次填入 (Populate) 以來原始值已變更,更新或刪除就會成功,不過開放式並行存取檢查將不會如預期般回報失敗。

自訂 GridView 控制項中的編輯使用者介面

您可以自訂編輯 (UI) 項目,例如在編輯模式中針對每個資料欄位顯示的控制項型別。自動雙向資料繫結允許您的自訂控制項,以提供可編輯且已編輯的值給資料存放區,以及從資料存放區中讀取它們。

注意事項:

如果您變更資料來源控制項中的更新陳述式,或者如果您重新排列 GridView 控制項中的資料行,一定要確定 GridView 控制項傳遞給資料來源的值會符合對應的資料來源設定。

請參閱

概念

資料來源控制項概觀

參考

GridView Web 伺服器控制項概觀