以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于验证数据问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=154196)

--  作者:裴保民
--  发布时间:2020/9/7 18:18:00
--  关于验证数据问题

怎样在DataColChanged事件中验证数据不通过时将数据恢复到未修改前的数据呢?


         If d1 < d2 Then

            MessageBox.Show("起始日期必须大于等于终止日期,请核实!","提示")

                e.Cancel=True  这句代码不管用呢?

                Return

            End If



--  作者:有点蓝
--  发布时间:2020/9/7 20:18:00
--  
DataColChanged没有e.Cancel用法,放到DataColChanging事件
--  作者:裴保民
--  发布时间:2020/9/7 20:31:00
--  

在 DataColChanging 事件中写了如下代码

Dim s1 As String = e.DataRow("终止号")
Dim s2 As String = e.DataRow("起始号")
If s1.length > 3 AndAlso s2.length > 3   Then
    Dim d1 As Integer = CLng(s1.substring(s1.length - 3))
    Dim d2 As Integer = CLng(s2.substring(s2.length - 3))
    If d1 > d2 Then
        MessageBox.Show("起始日期必须大于等于转账日期,请核实!","提示")
        e.Cancel=True
        Return
    End If
End  If

如果验证错误还是回复不了输入前的数据

--  作者:有点蓝
--  发布时间:2020/9/7 20:33:00
--  
先看看:http://www.foxtable.com/webhelp/topics/1522.htm

如果符合条件肯定可以

--  作者:裴保民
--  发布时间:2020/9/7 20:52:00
--  
Dim s1 As String=""
Dim s2 As String =""
Select Case e.DataCol.Name
    Case "起始号"
        s1= e.NewValue
        s2  = e.DataRow("终止号")
        If s1.length > 3 AndAlso s2.length > 3   Then
            Dim d1 As Integer = CLng(s1.substring(s1.length - 3))
            Dim d2 As Integer = CLng(s2.substring(s2.length - 3))
            If d1 >d2 Then
                MessageBox.Show("起始号必须大于等于终止号,请核实!","提示")
                e.Cancel=True
                Return
            End If
        End  If
    Case "终止号"
        s1 = e.DataRow("终止号")
        s2 = e.NewValue
        If s1.length > 3 AndAlso s2.length > 3   Then
            Dim d1 As Integer = CLng(s1.substring(s1.length - 3))
            Dim d2 As Integer = CLng(s2.substring(s2.length - 3))
            If d1 >d2 Then
                MessageBox.Show("起始号必须大于等于终止号,请核实!","提示")
                e.Cancel=True
                Return
            End If
        End  If
End Select
经过测试修改成这样代码能实现,不过看上去代码太繁琐,怎么简化一下呢?



[此贴子已经被作者于2020/9/7 21:27:39编辑过]

--  作者:有点蓝
--  发布时间:2020/9/7 21:35:00
--  
Dim s1 As String=""
Dim s2 As String =""
Select Case e.DataCol.Name
    Case "起始号","终止号"
        If e.DataCol.Name = "起始号"
            s1= e.NewValue
            s2  = e.DataRow("终止号")
        Else
            s1 = e.DataRow("起始号")
            s2 = e.NewValue
        End If
        If s1.length > 3 AndAlso s2.length > 3   Then
            Dim d1 As Integer = CLng(s1.substring(s1.length - 3))
            Dim d2 As Integer = CLng(s2.substring(s2.length - 3))
            If d1 >d2 Then
                MessageBox.Show("起始号必须大于等于终止号,请核实!","提示")
                e.Cancel=True
            End If
        End  If
End Select

--  作者:裴保民
--  发布时间:2020/9/7 22:06:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:截图06.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:截图07.jpg
图片点击可在新窗口打开查看

如果删除删除数据(也就是空值)时弹出错误框



--  作者:有点蓝
--  发布时间:2020/9/7 22:13:00
--  
既然知道空值有问题,就加上判断咯:http://www.foxtable.com/webhelp/topics/1470.htm
--  作者:裴保民
--  发布时间:2020/9/7 22:55:00
--  
Dim dr As DataRow = e.DataRow
Dim s1 As String=""上传附件
Dim s2 As String =""
Select Case e.DataCol.Name
    Case "起始号","终止号"
 If dr.IsNull("起始号") OrElse dr.IsNull("终止号") Then \'如果数量或单价为空
            dr("充值张数") = Nothing
        Return
        End If                                                          是不是的判断新值呢?新值空值怎么判断呢?
        If e.DataCol.Name = "起始号"
            s1= e.NewValue
            s2  = e.DataRow("终止号")
        Else
            s1 = e.DataRow("起始号")
            s2 = e.NewValue
        End If
        If s1.length > 3 AndAlso s2.length > 3   Then
            Dim d1 As Integer = CLng(s1.substring(s1.length - 3))
            Dim d2 As Integer = CLng(s2.substring(s2.length - 3))
            If d1 >d2 Then
                MessageBox.Show("起始号必须大于等于终止号,请核实!","提示")
                e.Cancel=True
            End If
        End  If
End Select

蓝老师加了判断怎么还是弹出错误呢?

[此贴子已经被作者于2020/9/7 22:56:39编辑过]

--  作者:有点蓝
--  发布时间:2020/9/7 23:07:00
--  
If s1 > "" andalso s2 > "" andalso s1.length > 3 AndAlso s2.length > 3   Then