ASP.Net : GridView 刪除資料後 無法刷新 – C#

ASP.Net : GridView 刪除資料後 無法刷新 – C#

GridView 無法刷新畫面

GridView 無法刷新畫面

嚴格來說,標題不太嚴謹,但,最常遇到的就是刪除後不更新
因為通常我很少真的去 Delete 資料庫裡的資料,所以 Delete 必要時會自己手寫
其他諸如 Select / Update 如果對象只是單一資料表,通常我會偷懶 用 SQLDataSource 這一類的元件

真正的狀況是: 如 GridView設定的DataSourceID=SqlDataSource 時
在GridView的控制項中,[自行觸發] 事件後,去呼叫 DataSource 元件的 Bind 事件
或者GridView 的 Bind 事件,但 GridView 畫面中的資料卻沒有被刷新
這時候DB已經更新了,但是卻沒有反應到GridView上

上面的重點是 [自行觸發] 事件 ,如果把 Update / Delete 的處理,直接放在 DataSource 中,由GridView直接透過繫結去完成觸發
並不會發生這種狀況

例如我要刪除資料,自己在後置程式碼中處理,並且在GridView 中放了 ~ 例如 button 元件,並指定其 CommandName =’delete’ 時
就會發生,不管怎麼Bind,或者設定 不啟用ViewSataes 停用快取,都無法順利的刷新畫面

解法就是,不要把 CommandName 設定為 Asp.net 預設的 delete
中間的原理…就不多描述了
像GridView這樣的資料顯示元件,Asp.net支援可以在其包含的元件中,設定CommandName 就去呼叫對應的DataSource SQL處理函式
預設的有 edit/update/cancel/delete/

如果需要自己去判斷各類狀況,例如更新不同欄位,或者做檢查,處理完之後,想要可以順利的刷新GridView
那就避免使用預設的這些命令保留詞,自行命名,這樣更新後,呼叫 Bind就可以順利刷新

自訂的名稱則無法自動繫結這些處理,要透過 RowCommand 事件去自行判斷與處理

不過得先提到的是,這麼做會有其他的影響
例如,以本例而言,如果直接設定 DataSource 的 Delete Command,並且在GridView中,設定某個按鈕的 CommandName=’delete’
進行呼叫的話,GridView 還提供了 RowDeleted 與 RowDeleting,讓我們在資料列,刪除前與刪除後,去做其他的處理
當然Update的話 有RowUpdated 與 RowUpdating,另外還有其他相關的對應事件

若將按鈕的CommandName設定成 非 edit/update/delete/cancel的話,將無法觸發這些事件,必須另外自行處理




相連文章

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *