Как отобразить изображение, если значение имеет десятичную точку? - PullRequest
0 голосов
/ 11 января 2012

В основном на моей странице aspx у меня есть сетка, которая отображает значение из моей базы данных в виде изображения.Поэтому, если значение в моей таблице базы данных равно 5, оно будет отображаться в виде 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.Если бы это имело какой-то смысл, лол.

У кого-нибудь есть идеи, как это сделать?

Ответы [ 3 ]

1 голос
/ 11 января 2012

Судя по вашей ошибке, вероятно, вы даже не принимаете десятичные значения и не вставляете значение 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 голосов
/ 11 января 2012

Если вы хотите сделать это, я действительно рекомендую использовать одно изображение, которое содержит все звезды в нем.Таким образом, у этого изображения должно быть 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>

Это просто простой метод, который даст вам идею расширить и настроить свою логику.Надеюсь, это поможет: -)

0 голосов
/ 11 января 2012

Вам необходимо проверить значение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...