top
Loading...
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
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗