ASP.NET2.0高級數據處理之處理控件事件

推薦:ASP.NET數據庫專區
在前面的部分中,你已經看到了幾個數據控件事件的例子。數據控件的事件都是在頁面執行生命周期的適當時候提供給你,供你插入自定義代碼的。一般情況下,在某種特定的操作發生之前和之后,數據控件都會暴露事件。在某種操作之前調用的事件的名稱一般帶有-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 GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) ' 用戶在只讀模式中點擊"編輯"按鈕的時候引發 Response.Write("Row editing...") ' 如果GridView已經處于編輯模式,就終止編輯操作 If Not GridView1.EditIndex = -1 Then e.Cancel = True End If End Sub Protected Sub GridView1_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 GridView1_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 GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) ' 當用戶在編輯模式中點擊"取消"按鈕的時候引發 Response.Write("Edit canceled") End Sub Protected Sub SqlDataSource1_Updated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) ' 當更新操作完成之后引發 Response.Write("SqlDataSource: Update complete<br />") End Sub Protected Sub SqlDataSource1_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 DetailsView1_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Dim f As FileUpload = DetailsView1.FindControl("FileUpload1") If f.HasFile Then ' 保存文件 End If End Sub |
與上面的例子類似,下面的例子演示了FormView的ItemDeleted事件,當照片的數據庫記錄被刪除的時候,它把相關的照片文件從磁盤上刪除。同樣,刪除文件的代碼也被注釋了。
| Protected Sub FormView1_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 |