2012-01-11 29 views
-1

基本上我在我的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中。如果这有什么意义大声笑。

任何人都有一个想法如何做到这一点?

+0

你问如何确定,如果你有一个小数部分?您可以将值乘以10,然后检查模10的值是否为零。如果没有,你有一个小数部分。 – kinakuta 2012-01-11 02:46:37

回答

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,而不是与+连接字符串的自由。

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 
0

如果你想这样做,我真的建议使用一个包含所有星星的图像。使图像应该有5个统计,如:

enter image description here

对于这个演示中,我加入了图像的宽度120像素和24像素高度。然后,你需要添加一个这样的:

然后,当你想展示你的明星,你需要找出这个宽度用下面的方法:

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> 

这仅仅是一个简单的方法,这将给你一个想法,扩展和自定义您的逻辑。我希望这有助于:-)