Foxtable(狐表)用户栏目专家坐堂 → 请看列类型的问题


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

主题:请看列类型的问题

美女呀,离线,留言给我吧!
yangming
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
请看列类型的问题  发帖心情 Post By:2009/6/27 10:28:00 [只看该作者]

这是一个狐友的例子,奖励为整数列,记功等级为字符型,为何还会出现类型错误?
If e.DataCol.Name = "记功等级" Then
    If e.DataRow.IsNull("记功等级") Then
 e.DataRow("奖励") = Nothing
    Else
Dim s As String = e.DataRow("记功等级")
Dim s2 As String = "★"
Dim s3 As Integer = CInt(s)
e.DataRow("记功等级") = s2.PadLeft(s,"★")
e.DataRow("奖励") =s3 * 50
End If
End If
[此贴子已经被作者于2009-6-27 10:29:12编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/27 10:34:00 [只看该作者]

If e.DataCol.Name = "记功等级" Then
    If e.DataRow.IsNull("记功等级") Then
        e.DataRow("奖励") = Nothing
    Else
        Dim s As String = e.DataRow("记功等级")
        If IsNumeric(s) Then
            Dim s2 As String = "★"
            Dim s3 As Integer = CInt(s)
            e.DataRow("记功等级") = s2.PadLeft(s,"★")
            e.DataRow("奖励") =s3 * 50
        End If
    End If
End If

 回到顶部
美女呀,离线,留言给我吧!
yangming
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/6/27 10:44:00 [只看该作者]

IsNumeric,这个我还没用过,呵呵,谢谢贺老师!
不明白,为何不能直接转类型呢?

 回到顶部
美女呀,离线,留言给我吧!
yangming
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/6/27 10:48:00 [只看该作者]

我做好了,上传给大家看看,呵呵
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:填充指定的字符.table


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/27 10:49:00 [只看该作者]

因为记功等级列有可能是字符,此时无法转换为数字。
用IsNumeric判断该列的内容是否是数字,如果是的,则转换。

 回到顶部
美女呀,离线,留言给我吧!
yangming
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/6/27 10:59:00 [只看该作者]

以下是引用狐狸爸爸在2009-6-27 10:49:00的发言:
因为记功等级列有可能是字符,此时无法转换为数字。
用IsNumeric判断该列的内容是否是数字,如果是的,则转换。

明白了,又学了一招,呵呵


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/27 11:06:00 [只看该作者]

其实,不用IsNumeric,用帮助中介绍的知识,也可以的,甚至更简洁:

If e.DataCol.Name = "记功等级" Then
    If e.DataRow.IsNull("记功等级") Then
        e.DataRow("奖励") = Nothing
    Else
        Dim s As Integer
        If Integer.TryParse(e.DataRow("记功等级"),s) Then
            e.DataRow("记功等级") = "★".PadLeft(s,"★")
            e.DataRow("奖励") =s * 50
        End If
    End If
End If
[此贴子已经被作者于2009-6-27 11:05:50编辑过]

 回到顶部
美女呀,离线,留言给我吧!
yangming
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/6/27 11:42:00 [只看该作者]

以下是引用狐狸爸爸在2009-6-27 11:06:00的发言:
其实,不用IsNumeric,用帮助中介绍的知识,也可以的,甚至更简洁:

If e.DataCol.Name = "记功等级" Then
    If e.DataRow.IsNull("记功等级") Then
        e.DataRow("奖励") = Nothing
    Else
        Dim s As Integer
        If Integer.TryParse(e.DataRow("记功等级"),s) Then
            e.DataRow("记功等级") = "★".PadLeft(s,"★")
            e.DataRow("奖励") =s * 50
        End If
    End If
End If
[此贴子已经被作者于2009-6-27 11:05:50编辑过]

我觉得

IsNumeric更好理解,呵呵

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/27 12:04:00 [只看该作者]

哈哈,TryParse字面上就是尝试转换的意思啊,也好理解嘛。

图片点击可在新窗口打开查看

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/6/27 14:31:00 [只看该作者]

还有待改进:  碰到 ★★2 这样的修改输入时,要自动清空或给个提示重新输入!

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

怎样判断如果原来的内容包含★号?
[此贴子已经被作者于2009-6-27 14:33:58编辑过]

 回到顶部
总数 15 1 2 下一页