在前面的部分中
你已經看到了幾個數據控件事件的例子
數據控件的事件都是在頁面執行生命周期的適當時候提供給你
供你插入自定義代碼的
一般情況下
在某種特定的操作發生之前和之後
數據控件都會暴露事件
在某種操作之前調用的事件的名稱一般帶有
ing後綴
而在某種操作之後調用的事件的名稱一般帶有
ed後綴
例如
GridView所支持的事件包括
· PageIndexChanging和PageIndexChanged
在分頁操作之前和之後引發
· SelectedIndexChanging和SelectedIndexChanged
在選擇操作發生之前和之後引發
· Sorting和Sorted
在排序操作之前和之後引發
· RowEditing和RowCancelingEdit
在數據行進入編輯模式之前或編輯模式被終止之前引發
· RowUpdating和RowUpdated
在更新操作之前和之後引發
· RowDeleting和RowDeleted
在刪除操作之前和之後引發
· RowDataBound
當數據行進行數據綁定的時候引發
· RowCreated
當建立了數據行並顯示的時候引發
· RowCommand
調用內部控件的按鈕命令的時候引發
數據源控件也暴露了一些事件
與數據綁定控件的事件類似
SqlDataSource和ObjectDataSource控件都支持下面一些事件
· Selecting和Selected
在選擇操作之前和之後引發
· Updating和Updated
在更新操作之前和之後引發
· Deleting和Deleted
在刪除操作之前和之後引發
· Inserting和Inserted
在插入操作之前和之後引發
· Filtering
在過濾器操作發生之前引發
當ObjectDataSource控件的TypeName屬性所指定的對象建立或銷毀的時候
它還提供了額外的事件
你可以通過設置隨事件參數傳遞的ObjectInstance屬性
在ObjectCreating事件中設置自定義的對象
· ObjectCreating和ObjectCreated
在對象被建立之前和之後引發
· ObjectDisposing
在對象銷毀之前引發
某種操作之後引發的事件用於編寫自定義代碼來響應特定的操作
或檢查操作的成功/失敗狀態
例如
你可以檢查Update
Insert或Delete操作的RowsAffected
或檢查Exception屬性以確定在處理過程中是否發生了異常
你還可以設置事件參數的ExceptionHandled屬性以防止異常顯示在控件或頁面上
下面的例子演示了GridView和SqlDataSource的多個事件處理代碼
以及引發這些事件的相關次序
<script runat=
server
>
Protected Sub GridView
_RowEditing(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
GridViewEditEventArgs)
用戶在只讀模式中點擊
編輯
按鈕的時候引發
Response
Write(
Row editing
)
如果GridView已經處於編輯模式
就終止編輯操作
If Not GridView
EditIndex =
Then
e
Cancel = True
End If
End Sub
Protected Sub GridView
_RowUpdating(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
GridViewUpdateEventArgs)
當用戶在編輯模式中點擊
更新
按鈕的時候引發
Response
Write(
GridView: Row updating
<br/>
)
此處可以選擇終止事件
例如不允許用戶更新數據
If User
IsInRole(
Restricted
) Then
e
Cancel = True
End If
End Sub
Protected Sub GridView
_RowUpdated(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
GridViewUpdatedEventArgs)
當更新操作完成所時候引發
Response
Write(
GridView: Row updated<br/>
)
If Not e
Exception Is Nothing Then
此處可以執行自定義的錯誤處理
完成之後設置ExceptionHandled = true
e
ExceptionHandled = True
End If
可以檢測更新操作所影響的行數
Response
Write(
<br />Affected rows:
& Server
HtmlEncode(e
AffectedRows))
End Sub
Protected Sub GridView
_RowCancelingEdit(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
GridViewCancelEditEventArgs)
當用戶在編輯模式中點擊
取消
按鈕的時候引發
Response
Write(
Edit canceled
)
End Sub
Protected Sub SqlDataSource
_Updated(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
SqlDataSourceStatusEventArgs)
當更新操作完成之後引發
Response
Write(
SqlDataSource: Update complete<br />
)
End Sub
Protected Sub SqlDataSource
_Updating(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
SqlDataSourceCommandEventArgs)
調用更新操作的時候引發
Response
Write(
SqlDataSource: Updating
)
End Sub
</script>
下面一個例子演示了一種更特殊的DetailsView的Inserting事件處理情形
它從DetailsView 的FileUpload控件中獲取照片文件
在DetailsView完成插入操作(在數據庫為該照片文件插入一條記錄)之前
把該照片的內容保存到磁盤上
為了演示的目的
實際的文件保存代碼都被注釋了
你可以自己試驗一下
Protected Sub DetailsView
_ItemInserting(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
DetailsViewInsertEventArgs)
Dim f As FileUpload = DetailsView
FindControl(
FileUpload
)
If f
HasFile Then
保存文件
End If
End Sub
與上面的例子類似
下面的例子演示了FormView的ItemDeleted事件
當照片的數據庫記錄被刪除的時候
它把相關的照片文件從磁盤上刪除
同樣
刪除文件的代碼也被注釋了
Protected Sub FormView
_ItemDeleted(ByVal sender As Object
ByVal e As System
Web
UI
WebControls
FormViewDeletedEventArgs)
If (e
Exception Is Nothing) Then
刪除文件
Response
Redirect(e
Values(
AlbumID
))
End If
End Sub
From:http://tw.wingwit.com/Article/program/net/201311/13124.html