何時(shí)觸發(fā):任何在GridView中設定了CommandName的控件都可以觸發(fā)該事件。
代碼案例:
<asp:LinkButton runat="server" ID="lbtnDelete" Text="刪除"
CommandArgument='<%# Eval("StudentNo") %>' CommandName="Del"/>
說(shuō)明:
需要在GridView中執行某個(gè)命令時(shí)能夠自定義行為,而不是有GridView自動(dòng)來(lái)完成,可使用該事件。比如執行自定義的刪除和修改功能。
該事件可同時(shí)處理一個(gè)GridView發(fā)出的不同的操作指令,如刪除和修改,如何判斷某一時(shí)刻做什么操作就成為了關(guān)鍵。我們可以通過(guò)CommandName來(lái)區分每個(gè)不同的指令。如
if(commandName=="Del"){
//執行刪除操作....
}else if(commandName=="Update"){
//執行修改操作....
}
2. RowDeleting:行正在刪除事件
何時(shí)觸發(fā):
1.如果GridView是通過(guò)設置 DataSourceID="odsStudent" 來(lái)指定數據源的,則在執行刪除時(shí)總會(huì )調用該事件
2.只要引發(fā)事件的CommandName是“Delete”就會(huì )自動(dòng)引發(fā)RowDeleting事件。
代碼案例:
1.<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
2.<asp:LinkButton runat="server" ID="lbtnDelete" Text="刪除" CommandName="Delete"/>
說(shuō)明:
如果GridView的數據源是通過(guò)設置 DataSourceID="odsStudent" 來(lái)指定,則必須為ObjectDataSource指定DeleteMenthod方法,因為GridView此時(shí)某自動(dòng)尋找DeleteMenthod屬性指定的刪除方法,如果沒(méi)有指定的方法,則會(huì )報錯,如下圖所示:

當然此時(shí)也會(huì )觸發(fā)RowCommand事件,我們可以在RowCommand事件中手動(dòng)調用刪除方法來(lái)執行刪除功能,但必須在RowDeleting事件處理方法中寫(xiě)上 "e.Cancel = true;",取消該事件的默認行為。所以如果不需要使用ObjectDataSource的自動(dòng)綁定刪除功能,最好不要將控件的CommandName設為“Delete”。
如果GridView的DataSource是通過(guò)編碼手動(dòng)指定的,則執行刪除時(shí)不需要寫(xiě)“e.Cancel = true;”,但RowDeleting事件依然會(huì )調用,但不會(huì )如尋找和依賴(lài)ObjectDataSource的DeleteMethod方法了。可以看出只要GridView指定了DataSourceId,在刪除Gridview記錄時(shí)就會(huì )自動(dòng)找ObjectDataSource的相關(guān)的DeleteMethod。
3. RowUpdating:行正在修改事件
各項操作和注意事項和RowDeleting一樣。
總結:
1. GridView中一定是先調用RowCommand事件再調用RowDeleting或RowUpdating事件
2. 不要在自定義的CommandName屬性中使用“Delete、Update、Insert、Select”四個(gè)名稱(chēng),這四個(gè)名稱(chēng)被GridView自動(dòng)完成事件所占用。
聯(lián)系客服