Foxtable(狐表)用户栏目专家坐堂 → 日期列输入简化-已解決


  共有6312人关注过本帖树形打印复制链接

主题:日期列输入简化-已解決

帅哥哟,离线,有人找我吗?
realredred
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/15 20:30:00 [只看该作者]

综合 yinyb36 和 gryy 狐友的方法

达到了较为完美的日子输入

ValidateEdit

输入代码:目的检测辅助输入列的键入格式是否等同日子的格式

 

If e.Col.Name = "S手雕S" Or  e.Col.Name = "S手雕F" Or  e.Col.Name = "S电雕S" Or  e.Col.Name = "S电雕F" Then
    Dim txt As String = e.Text
    Dim mt1 As String = Mid(txt,1,2 )
    Dim mt2 As String = Mid(txt,3,2 )
    Dim mt3 As String = Mid(txt,5,2 )
    Dim mt4 As String = Mid(txt,4,2 )
   
    If txt.Length = 4 Then
        If  (( mt1 = "01"  Or mt1 = "03" Or mt1 = "05" Or mt1 = "07" Or mt1 = "08" Or mt1 = "10" Or mt1 = "12" ) And  mt2 <= "31" ) Or _
            (( mt1 = "04"  Or mt1 = "06" Or mt1 = "09" Or mt1 = "11" ) And  mt2 <= "30" ) Or ( mt1 = "02" And mt2 <= "28" ) Then
            e.Text = Date.Today.Year & "-" &   Mid(txt,1,2) & "-" & Mid(txt,3,2)
        Else
            MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True
        End If
    ElseIf txt.Length = 6 Then
        If  (( mt2 = "01"  Or mt2 = "03" Or mt2 = "05" Or mt2 = "07" Or mt2 = "08" Or mt2 = "10" Or mt2 = "12" ) And  mt3 <= "31" ) Or _
            (( mt2 = "04"  Or mt2 = "06" Or mt2 = "09" Or mt2 = "11" ) And  mt3 <= "30" ) Or ( mt2 = "02" And mt3 <= "28" ) Then
            e.Text = "20" & Mid(txt,1,2 ) & "-" & Mid(txt,3,2) & "-" & Mid(txt,5,2)
        Else
            MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True
        End If
       
    ElseIf txt.Length = 5 Then
       
        If  (( mt1 = "01"  Or mt1 = "03" Or mt1 = "05" Or mt1 = "07" Or mt1 = "08" Or mt1 = "10" Or mt1 = "12" ) And  mt4 <= "31" ) Or _
            (( mt1 = "04"  Or mt1 = "06" Or mt1 = "09" Or mt1 = "11" ) And  mt4 <= "30" ) Or ( mt1 = "02" And mt4 <= "28" ) Then
            e.Text = Date.Today.Year & "-" & Mid(txt,1,5 )
        Else
            MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True
        End If
       
    ElseIf txt.Length > 0 And txt.Length <= 3 Then
        MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True       
    End If
End If

 

这样,在辅助列输入4位数 " 0515"  ,帶字符的5位数"05-15" 或 帶年份的6位数 "130515"

都会转化为"2013-05-15"

 

然后再用 gryy 的方法

把辅助列的值  .转为正常日子列里,假如输入的是不正常数值,如:"130231"

就提示出錯並需要更正为正常日子值.

 

 

虽然转了一个大弯,但总算滿足到美女们的懶惰输入方式了,

感谢各狐友提供方法和思路

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
zstk7333
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:328 积分:2960 威望:0 精华:0 注册:2011/5/3 20:21:00
回复:(realredred)折騰出來了应是这样Dim messageD...  发帖心情 Post By:2013/5/15 21:40:00 [只看该作者]

弱弱的问一句,你写的这个代码是写在哪里的?如果写在validateedit这里,就会出现“编译错误:'DateRow' is not a member of 'ValidateEditEventArgs'.  错误代码:Dim dr As DataRow = e.DataRow”。如果不是写在这里,那是写在哪里?请指教,谢谢。


 回到顶部
帅哥哟,离线,有人找我吗?
傻马难骑
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:215 积分:1306 威望:0 精华:0 注册:2013/4/7 22:24:00
  发帖心情 Post By:2013/5/15 21:57:00 [只看该作者]

学习了


 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/15 22:30:00 [只看该作者]

写在这里

表属性的

datacolchanged

[此贴子已经被作者于2013-5-15 22:30:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hygienyxb
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:4 积分:86 威望:0 精华:0 注册:2013/1/14 8:42:00
  发帖心情 Post By:2013/6/5 9:22:00 [只看该作者]

学习。这个好。

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/5 9:43:00 [只看该作者]

你们部门美女也真是懒,还有你明确告诉他们只要输入月和日,强制4位,如0604就可以了,还会有人输入06/04吗?

你说这是习惯,能更省事的少打一个字符,谁会不学哪?还会有那么复杂的代码吗?应该只要验证下能不能转换为日期就可以了吧。

有时候,编程不是一味的顺应一些不规范的要求,而想方设法的满足,尝试改变一点,但这个改变必须必原来的更简单,才会被接受。

 

顺便问句,为什么不用下拉框选择日期?我想美女们连键盘都不用了,只要点点鼠标应该会更加喜欢吧


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/5 11:32:00 [只看该作者]

将日期类型改成字符类型

AfterEdit

Dim y As String = Left((e.Row("日期")),2)
Dim d As String = Right((e.Row("日期")),2)
Dim ys1() As String = {"01","03","05","07","08","10","12"}
Dim ys2() As String = {"04","06","09","11"}
If e.Col.Name = "日期" Then
    If e.Row("日期").Length = 4 Then
        For i As Integer = 0 To ys1.Length - 1
            For j As Integer = 0 To ys2.Length - 1
                If val(y) > 12 OrElse (y.StartsWith(ys1(i)) AndAlso val(d) > 31) OrElse (y.StartsWith(ys2(j)) AndAlso val(d) > 30) OrElse (y.StartsWith("02") AndAlso val(d) > 28) Then
                    e.Row("日期") = ""
                    MessageBox.Show("年月日有误")
                    e.Table.Select(e.Row.Index,e.Col.Index - 1)
                    Return
                Else
                    e.Row("日期") = Date.Today().Year & "-" & y & "-" & d
                End If
            Next
        Next
    End If
End If

[此贴子已经被作者于2013-6-5 11:54:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/6/5 18:42:00 [只看该作者]

我早已写了一个  不过比ISY老師的笨呆一点的

 

'ValidateEdit


'执版简易日子输入
Dim nms() As String = { "S交货期" }

For Each nm As String In nms
    If e.Col.Name = nm Then

        Dim txt As String = e.Text
        Dim mt1 As String = Mid(txt,1,2 ) '4位数取月份
        Dim mt2 As String = Mid(txt,3,2 ) '4位数取日 , 6位数取月份
        Dim mt3 As String = Mid(txt,5,2 ) '6位数取日
        Dim mt4 As String = Mid(txt,4,2 ) '5位数取日
        Dim mt5 As String = Mid(txt,6,2 ) '10位数帶"-" 取月份
        Dim mt6 As String = Mid(txt,9,2 ) '10位数帶"-" 取日
        Dim mt7 As String = Mid(txt,5,1 ) '10位数帶"-" 取年后的"-"
        Dim mt8 As String = Mid(txt,8,1 ) '10位数帶"-" 取年后的"-"
        If txt.Length = 4 Then
            If  (( mt1 = "01"  Or mt1 = "03" Or mt1 = "05" Or mt1 = "07" Or mt1 = "08" Or mt1 = "10" Or mt1 = "12" ) And  mt2 <= "31" ) Or _
                (( mt1 = "04"  Or mt1 = "06" Or mt1 = "09" Or mt1 = "11" ) And  mt2 <= "30" ) Or ( mt1 = "02" And mt2 <= "28" ) Then
                e.Text = Date.Today.Year & "-" &   Mid(txt,1,2) & "-" & Mid(txt,3,2)
            Else
                MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
                e.Cancel = True
            End If
        ElseIf txt.Length = 6 Then
            If  (( mt2 = "01"  Or mt2 = "03" Or mt2 = "05" Or mt2 = "07" Or mt2 = "08" Or mt2 = "10" Or mt2 = "12" ) And  mt3 <= "31" ) Or _
                (( mt2 = "04"  Or mt2 = "06" Or mt2 = "09" Or mt2 = "11" ) And  mt3 <= "30" ) Or ( mt2 = "02" And mt3 <= "28" ) Then
                e.Text = "20" & Mid(txt,1,2 ) & "-" & Mid(txt,3,2) & "-" & Mid(txt,5,2)
            Else
                MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
                e.Cancel = True
            End If
           

           
        ElseIf txt.Length = 10 Then
           
            If  (mt7 = "-" And mt8 = "-") And (( mt5 = "01"  Or mt5 = "03" Or mt5 = "05" Or mt5 = "07" Or mt5 = "08" Or mt5 = "10" Or mt5 = "12" ) And  mt6 <= "31" ) Or _
                (mt7 = "-" And mt8 = "-") And (( mt5 = "04"  Or mt5 = "06" Or mt5 = "09" Or mt5 = "11" ) And  mt6 <= "30" ) Or (mt7 = "-" And mt8 = "-") And ( mt5 = "02" And mt6 <= "28" ) Then
                e.Text = txt
            Else
                MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
                e.Cancel = True
            End If
           
           
        ElseIf txt.Length > 0 And txt.Length <= 3  Or  txt.Length = 5 Or  txt.Length > 6 And txt.Length <= 9 Then ' Or txt.Length > 10 Then
            MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
            e.Cancel = True
           
        End If
    End If
Next


 回到顶部
总数 18 上一页 1 2