Foxtable(狐表)用户栏目专家坐堂 → 对于造型说明无效的字符值


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

主题:对于造型说明无效的字符值

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


加好友 发短信
等级:六尾狐 帖子:1498 积分:11164 威望:0 精华:0 注册:2014/8/13 16:19:00
对于造型说明无效的字符值  发帖心情 Post By:2021/3/10 16:52:00 [只看该作者]

如题,报上述错误。
查了一下论坛,知道是日期格式的问题。
那有什么办法在代码里面怎么处理一下,避免这种错误。
老要用户改日期,好像也不太友好。

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/10 16:57:00 [只看该作者]


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


加好友 发短信
等级:六尾狐 帖子:1498 积分:11164 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2021/6/2 16:06:00 [只看该作者]

Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo

Dim DateInfo As System.Reflection.FieldInfo = cd.Gettype.GetField("generalLongTimePattern", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)

If  DateInfo IsNot Nothing Then
    DateInfo.SetValue(cd, "yyyy-MM-dd HH:mm:ss")
End If




代码写入项目BeforeOpenProject事件中
Dim d As Date = Date.Today
Dim s As String = CStr(d)
Dim l As Integer = s.Length
If l > 10 Then '判断系统日期是否符合标准
    Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International","sShortDate","yyyy-MM-dd")

    e.Cancel = True
    e.HideSplashForm = True
    MessageBox.Show("程序将自动关闭,以校对系统日期格式!" & vbcrlf & "而后请重新启动程序","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Syscmd.Project.Exit()
End If

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


加好友 发短信
等级:六尾狐 帖子:1498 积分:11164 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2021/6/2 16:07:00 [只看该作者]

大哥,两个代码分别放在before open 或after open
系统里面也设置了,就是不行啊
怎么办?

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/2 16:08:00 [只看该作者]

那就不是系统日期格式的问题了。应该是导入了不合法的日期数据

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


加好友 发短信
等级:六尾狐 帖子:1498 积分:11164 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2021/6/9 17:43:00 [只看该作者]

在beforesaverow中,加下面的代码,总算解决了。
效率下降了很多。头疼。

For Each dc As DataCol In e.DataTable.DataCols
    If dc.IsDate Then
        strD = e.DataRow(dc.name)        
        If Date.TryParse(strD,d) Then '如果转换成功
            e.DataRow(dc.name) = format(d,"yyyy-MM-dd")
        Else
            e.DataRow(dc.name) = Nothing
        End If
    End If
Next

 回到顶部