首页 > 编程 > .NET > 正文

ASP.NET 2.0高级数据处理之处理控件事件

2024-07-10 13:09:11
字体:
来源:转载
供稿:网友
  在前面的部分中,你已经看到了几个数据控件事件的例子。数据控件的事件都是在页面执行生命周期的适当时候提供给你,供你插入自定义代码的。一般情况下,在某种特定的操作发生之前和之后,数据控件都会暴露事件。在某种操作之前调用的事件的名称一般带有-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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表