[*] Hello Snoopy

.NET and Flash Blog
用户操作“确认”

一个好的用户界面,在用户进行数据操作前特别是进行数据的修改、删除等操作前,必须提醒用户进行确认:是否继续进行选定的操作,防止用户错误操作,对于WinForm应用程序来说非常简单,而WebForm应用相对难一点。

原理其实也很简单,就是将页面的一些会引起postback到服务器端的事件作一次客户端的确认。可以通过客户端的javascript来做到这点。你可以使用window.confirm方法来让用户确认,然后用window.event.returnValue=false;来取消掉当前事件(也就是将onclick方法取消掉,所以就不postback到服务器端,也就不执行你的更新,删除逻辑)。

1、首先在页面中添加一段JavaScript函数
 <script language="javascript">

 function confirm_click()
 {
  var result=window.confirm("你确定需要继续吗?");
  if(result==false)
  {
   window.event.returnValue =false;
  }
 }
</script>

2、然后在服务器端Page_load事件里面给控件加入onclick的事件处理器(VB.NET)
 btnSearch.Attributes.Add("OnClick", "confirm_click();")
或者是直接书写JavaScript代码
 btnSearch.Attributes.Add("OnClick", "return confirm(""Are you sure you want to delete?"");")


 

以上是对单个控件设置,脚本代码可以直接添加,相对简单。但是对于DataGrid中的各种按钮列,就复杂一些,但是这种应用却非常的多,例如DataGrid中的编辑列,下面说一下我的实现方法。

其实还是和前面的在单个控件上添加事件处理器一样,找到DataGrid中某列中的所有按钮控件,逐个添加事件处理器,在这里我们需要使用DataGrid的ItemCreated事件,在该事件中遍历DataGridItem中的某个(或者)所有单元格中包含的所有控件,在相应的控件上添加事件处理器,示例代码如下:


    Private Sub dgResultsGrid_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgResultsGrid.ItemCreated
        Dim dgi As DataGridItem = e.Item
        If (dgi.ItemType = ListItemType.Item OrElse dgi.ItemType = ListItemType.AlternatingItem) Then
' 本例只检查DataGrid的Item和AlternatingItem行
            Dim c As Control
            For Each c In dgi.Cells(2).Controls  ' 只检查第3列中包含的LinkButton控件
                If TypeOf c Is LinkButton Then
                    Dim lbc As LinkButton = c
                    lbc.Attributes.Add("OnClick", "confirm_click();")  ' 在该控件上添加事件处理器
                End If
            Next
        End If

    End Sub

这样,运行的结果就是在DataGrid的所有行的第3列中的LinkButton上添加了确认代码。

posted on 2004-06-29 13:05  HelloSnoopy  阅读(632)  评论(0编辑  收藏  举报