以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请看列类型的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=3311)

--  作者:yangming
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间: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
--  发布时间:2009/6/27 10:44:00
--  
IsNumeric,这个我还没用过,呵呵,谢谢贺老师!
不明白,为何不能直接转类型呢?
--  作者:yangming
--  发布时间:2009/6/27 10:48:00
--  
我做好了,上传给大家看看,呵呵
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:填充指定的字符.table


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

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


--  作者:狐狸爸爸
--  发布时间: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
--  发布时间: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更好理解,呵呵

--  作者:狐狸爸爸
--  发布时间:2009/6/27 12:04:00
--  
哈哈,TryParse字面上就是尝试转换的意思啊,也好理解嘛。

图片点击可在新窗口打开查看
--  作者:mr725
--  发布时间:2009/6/27 14:31:00
--  
还有待改进:  碰到 ★★2 这样的修改输入时,要自动清空或给个提示重新输入!

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

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