在前面的部分中
你已经看到了几个数据控件事件的例子
数据控件的事件都是在页面执行生命周期的适当时候提供给你
供你插入自定义代码的
一般情况下
在某种特定的操作发生之前和之后
数据控件都会暴露事件
在某种操作之前调用的事件的名称一般带有
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 在对象销毁之前引发
某种操作之后引发的事件用于编写自定义代码来响应特定的操作或检查操作的成功/失败状态例如你可以检查UpdateInsert或Delete操作的RowsAffected或检查Exception属性以确定在处理过程中是否发生了异常你还可以设置事件参数的ExceptionHandled属性以防止异常显示在控件或页面上下面的例子演示了GridView和SqlDataSource的多个事件处理代码以及引发这些事件的相关次序
<script runat=server>
Protected Sub GridView_RowEditing(ByVal sender As Object ByVal e As SystemWebUIWebControlsGridViewEditEventArgs)
用户在只读模式中点击编辑按钮的时候引发
ResponseWrite(Row editing)
如果GridView已经处于编辑模式就终止编辑操作
If Not GridViewEditIndex = Then
eCancel = True
End If
End Sub
Protected Sub GridView_RowUpdating(ByVal sender As Object ByVal e As SystemWebUIWebControlsGridViewUpdateEventArgs)
当用户在编辑模式中点击更新按钮的时候引发
ResponseWrite(GridView: Row updating<br/>)
此处可以选择终止事件例如不允许用户更新数据
If UserIsInRole(Restricted) Then
eCancel = True
End If
End Sub
Protected Sub GridView_RowUpdated(ByVal sender As Object ByVal e As SystemWebUIWebControlsGridViewUpdatedEventArgs)
当更新操作完成所时候引发
ResponseWrite(GridView: Row updated<br/>)
If Not eException Is Nothing Then
此处可以执行自定义的错误处理完成之后设置ExceptionHandled = true
eExceptionHandled = True
End If
可以检测更新操作所影响的行数
ResponseWrite(<br />Affected rows: & ServerHtmlEncode(eAffectedRows))
End Sub
Protected Sub GridView_RowCancelingEdit(ByVal sender As Object ByVal e As SystemWebUIWebControlsGridViewCancelEditEventArgs)
当用户在编辑模式中点击取消按钮的时候引发
ResponseWrite(Edit canceled)
End Sub
Protected Sub SqlDataSource_Updated(ByVal sender As Object ByVal e As SystemWebUIWebControlsSqlDataSourceStatusEventArgs)
当更新操作完成之后引发
ResponseWrite(SqlDataSource: Update complete<br />)
End Sub
Protected Sub SqlDataSource_Updating(ByVal sender As Object ByVal e As SystemWebUIWebControlsSqlDataSourceCommandEventArgs)
调用更新操作的时候引发
ResponseWrite(SqlDataSource: Updating)
End Sub
</script>
下面一个例子演示了一种更特殊的DetailsView的Inserting事件处理情形它从DetailsView 的FileUpload控件中获取照片文件在DetailsView完成插入操作(在数据库为该照片文件插入一条记录)之前把该照片的内容保存到磁盘上为了演示的目的实际的文件保存代码都被注释了你可以自己试验一下
Protected Sub DetailsView_ItemInserting(ByVal sender As Object ByVal e As SystemWebUIWebControlsDetailsViewInsertEventArgs)
Dim f As FileUpload = DetailsViewFindControl(FileUpload)
If fHasFile Then
保存文件
End If
End Sub
与上面的例子类似下面的例子演示了FormView的ItemDeleted事件当照片的数据库记录被删除的时候它把相关的照片文件从磁盘上删除同样删除文件的代码也被注释了
Protected Sub FormView_ItemDeleted(ByVal sender As Object ByVal e As SystemWebUIWebControlsFormViewDeletedEventArgs)
If (eException Is Nothing) Then
删除文件
ResponseRedirect(eValues(AlbumID))
End If
End Sub