摘要
一般执行新增/修改完毕准备异动数据库前,通常会做一层数据正确性检查的动作;当我们使用 GridView 系结 SqlDataSoruce 来呈现数据,若 GridView 进行数据编辑存盘前也要做字段值的检查应该在如何做呢?应该在那个控件的那个事件去处理这个检查动作呢?

程序说明及实作
首先在页面上放置一个 GridView 及 SqlDataSource 控件,GridView 设为可编辑状态。





当 GridView 编辑储存时,我们要先做一些字段值正确性的检查动作,以下的范例为测试示范,只判断 LastName 字段不得为空,这种必填字段的判断一般只要使用 RequiredFieldValidator 控件在 Client 端即可。

方法一:在 GridView 的 RowUpdating 事件处理字段检查
GridView 在编辑储存前会引发 RowUpdating 事件,我们可以在此事件中处理字段检查,字段检查的程序代码如下。当字段检查不合法时,设定 e.Cancel = True 即可中断数据更新的动作。

    Protected Sub GridView1_RowUpdating(ByVal sender As ObjectByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
        
Dim sScript As String

        
If String.IsNullOrEmpty(e.NewValues.Item("LastName")) Then
            sScript 
= "alert('LastName 欄位不得為空')"
            
Me.ClientScript.RegisterStartupScript(Me.GetType, "error", sScript, True)
            e.Cancel 
= True
        
End If
    
End Sub

执行程序,故意将 LastName 清空,然后按 [更新] 钮进行储存,字段检查的动作就被执行了。



方法二:在 SqlDataSource 的 Updating 事件处理字段检查
对于 SqlDataSource 来说,编辑数据异动数据库之前,会引发 SqlDataSource 的 Updating 事件,字段检查的程序代码如下。当字段检查不合法时,设定 e.Cancel = True 即可中断数据更新的动作,这种方式的执行结果跟上个作法一样。

    Protected Sub SqlDataSource1_Updating(ByVal sender As ObjectByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Updating
        
Dim sScript As String
        
If String.IsNullOrEmpty(e.Command.Parameters("@LastName").Value) Then
            sScript 
= "alert('LastName 欄位不得為空')"
            
Me.ClientScript.RegisterStartupScript(Me.GetType, "error", sScript, True)
            e.Cancel 
= True
        
End If
    
End Sub


结论

以上的说明可以知道在 GridView.RowUpdating 事件及 SqlDataSource.Updating 事件都可以处理字段检查,在那个地方处理比较好呢?答案是由数据源头的 SqlDataSource 控件来处理会比较好,主要原因如下:
1.尽量不要在 UI 控件处理数据验证动作,因为一旦更换其它 UI 控件(如更换其它厂商开发的 GridView 控件),程序代码就又要改写。
2.不同的 UI 控件系结 SqlDataSource 控件,都可以适用相同方法。例如 FormView 及 GridView 不同的 UI 控件,都可以在 SqlDataSource.Updating 统一处理。
3.如果直接使用 SqlDataSource.Update 方法去执行更新动作,不会引发 UI 控件的相关事件,但是一样会引发 SqlDataSource.Updating 事件。

posted on 2008-06-13 15:54  jeff377  阅读(2651)  评论(6编辑  收藏  举报