一个好的用户界面,在用户进行数据操作前特别是进行数据的修改、删除等操作前,必须提醒用户进行确认:是否继续进行选定的操作,防止用户错误操作,对于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 ObjectByVal 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-17 11:43  zhumk  阅读(1468)  评论(3编辑  收藏  举报