基本上在我的aspx页面中,我有一个gridview,它将我数据库中的值显示为图像。因此,如果我的数据库表中的值为5,它将在gridview中显示为5个图像。即。(star.jpg star.jpg star.jpg star.jpg star.jpg)
代码:
Protected Function getrating(ByVal rate As Integer)
Dim getrating As String
getrating = ""
For i = 1 To rate
getrating = getrating + "<img src=""Images/star.jpg"" alt=""*"">"
Next
Return getrating
End Function
到目前为止整个数字一直很好,但现在我将平均值添加到我的数据库中,所以任何带小数点的值(如4.6)都会给我错误
"Conversion from type 'DBNull' to type 'Integer' is not valid."
当值有小数点时,如何添加图像?
由于我的数据库中的字段的范围设置为数字1到5,所以如果值具有小数点,我喜欢显示另一个图像。即。 “3.5”将显示在gridview star.jpg,star.jpg,star.jpg,halfstar.jpg中。如果这有任何意义lol。
任何人都知道如何做到这一点?
答案 0 :(得分:1)
根据您的错误判断,您可能甚至不接受十进制值并在发生时插入NULL
值。首先修复,确保结果不是DBNull
,然后您可以对Double
之类的小数类型进行更改:
Protected Function GetRating(ByVal rating As Double) As String
Dim result As New System.Text.StringBuilder()
While rating >= 1.0#
result.Append("<img src=""Images/star.jpg"" alt=""*"">")
rating -= 1.0#
End While
If rating > 0.0# Then _
result.Append("<img src=""Images/halfstar.jpg"" alt=""1/2"">")
Return result.ToString()
End Function
我也冒昧地使用StringBuilder
而不是使用+
连接字符串。
答案 1 :(得分:0)
您需要检查DBNull
值(来自错误说明)。
If reader.Read() Then
IF Not reader.IsDBNull(0) Then '1st column
'If field type is decimal
Dim decimalVar=reader.GetDecimal(0)
End If
End If
答案 2 :(得分:0)
如果你想这样做,我真的建议使用一张包含所有星星的图像。所以该图像应该有5个统计信息,如:
在本演示中,我添加了宽度为120px,高度为24px的图像。然后你需要添加如下:
然后,当你想要展示你的星星时,你需要通过以下方法找出它的宽度:
DIV width = (Rate/5) * 120
所以例如2.5将是(2.5 / 5)* 120 = 60!然后你需要将DIV的宽度改为60,然后你将获得2.5等级!并将变成类似:
<div style="background-image:url(http://s.codeproject.com/script/Ratings/Images/stars-fill.png);width:60px;height:24px;">
</div>
这只是一个简单的方法,可以让您根据逻辑进行扩展和自定义。我希望这会有所帮助: - )