Parto dall'inizio abbiamo creato un ecommerce...nell'amministrazione ho dei checkbox per identificare se il prodotto è in arrivo o nuovo.
Nella visualizzazione degli articoli abbiamo creato un controllo per inserire tre immagini a seconda della disponibilità del prodotto (disponibile, non disponibile, tra 1 e 5 unità) e due immagini per identificare se il prodotto è in arrivo o nuovo.
All'apparenza funziona ma solo su alcuni articoli in altri articoli non mi fà vedere lè immagini relative alla disponibilità oppure mi ridà quest'errore:
Cast non valido dal tipo 'DBNull' al tipo 'Boolean'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidCastException: Cast non valido dal tipo 'DBNull' al tipo 'Boolean'.
Source Error:
Line 145: <asp:Image ID="Image3" runat="server" ImageAlign="AbsMiddle" />
Line 146: <asp:Image ID="Image4" runat="server" ImageAlign="AbsMiddle" />
Line 147: <asp:CheckBox ID="CheckBox1" runat="server" Visible="False" Checked='<%# Eval("nuovo") %>' /><br />
Line 148: <asp:CheckBox ID="CheckBox2" runat="server" Visible="False" Checked='<%# Eval("inarrivo") %>' />
Line 149: <br />
Source File: D:\Inetpub\webs\roeldistribuzioniit\sottocat.aspx Line: 147
in alre categorie addirittura non mi fa accedere dandomi questo errore:
Input string was not in a correct format.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.FormatException: Input string was not in a correct format.
Source Error:
Line 50: End If
Line 51:
Line 52: If CInt(disp.Text) < 0 Then
Line 53: imgdisp.ImageUrl = "icona_non_disponibile.gif"
Line 54: ElseIf CInt(disp.Text) > 0 And inarrivo.Checked Then
Source File: D:\Inetpub\webs\roeldistribuzioniit\sottocat.aspx.vb Line: 52
Stack Trace:
Potete vedere l'esempio pratico su
http://www.roeldistribuzioni.it e navigando all'intereno delle categorie.
Vi posto inoltre la parte interessata del codice sorgente
Protected Sub GridView2_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView2.RowDataBound
If e.Row.RowType = DataControlRowType.Header Or e.Row.RowType = DataControlRowType.Footer Or e.Row.RowType = DataControlRowType.Pager Then
'nuylla
Else
Dim disp As Label = CType(e.Row.FindControl("Label5"), Label)
Dim inarrivo As CheckBox = CType(e.Row.FindControl("checkbox2"), CheckBox)
Dim nuovo As CheckBox = CType(e.Row.FindControl("checkbox1"), CheckBox)
Dim imgdisp As Image = CType(e.Row.FindControl("Image2"), Image)
Dim imgextra As Image = CType(e.Row.FindControl("image3"), Image)
Dim imgextra2 As Image = CType(e.Row.FindControl("image4"), Image)
If nuovo.Checked Then
imgextra.ImageUrl = "nuovo.gif"
Else : imgextra.Visible = False
End If
If inarrivo.Checked Then
imgextra2.ImageUrl = "inarrivo.gif"
Else : imgextra2.Visible = False
End If
If CInt(disp.Text) < 0 Then
imgdisp.ImageUrl = "icona_non_disponibile.gif"
ElseIf CInt(disp.Text) > 0 And inarrivo.Checked Then
imgdisp.ImageUrl = "icona_non_disponibile.gif"
ElseIf CInt(disp.Text) > 5 Then
imgdisp.ImageUrl = "icona_disponibile.gif"
ElseIf CInt(disp.Text) > 0 And CInt(disp.Text) < 5 Then
imgdisp.ImageUrl = "icona_media.gif"
End If
Dim panello As Panel = CType(e.Row.FindControl("Panel2"), Panel)
If CInt(disp.Text) > 0 Then
panello.Visible = False
Else
panello.Visible = False
Dim carrellino As ImageButton = CType(e.Row.FindControl("ImageButton1"), ImageButton)
carrellino.OnClientClick = "javascript:alert('L articolo selezionato non è disponibile in magazzino, per evadere quindi completamente il carrello bisognerà attendere l arrivo del prodotto.')"
End If
Dim scheda As Label = CType(e.Row.FindControl("Label6"), Label)
scheda.Text = Left(scheda.Text, 40) & "..."
Dim prezzo As Label = CType(e.Row.FindControl("label3"), Label)
Dim codice As Label = CType(e.Row.FindControl("Label1"), Label)
If Session("livello") <> "1" And Session("livello") <> "" Then
Dim sql As String = ""
Select Case Session("livello")
Case "2"
sql = "SELECT sconto2 FROM articoli WHERE codice = '" & codice.Text & "'"
Case "3"
sql = "SELECT sconto3 FROM articoli WHERE codice = '" & codice.Text & "'"
Case "4"
sql = "SELECT sconto4 FROM articoli WHERE codice = '" & codice.Text & "'"
Case "5"
sql = "SELECT sconto5 FROM articoli WHERE codice = '" & codice.Text & "'"
Case "6"
sql = "SELECT sconto6 FROM articoli WHERE codice = '" & codice.Text & "'"
Case "7"
sql = "SELECT sconto7 FROM articoli WHERE codice = '" & codice.Text & "'"
Case Else
'nulla
End Select
Dim conn As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
conn.ConnectionString = ConfigurationManager.ConnectionStrings(1).ConnectionString
conn.Open()
cmd.CommandType = CommandType.Text
cmd.CommandText = sql
cmd.Connection = conn
Dim sconto As Integer = cmd.ExecuteScalar
conn.Close()
prezzo.Text = CDbl(prezzo.Text) - ((CDbl(prezzo.Text) * CInt(sconto)) / 100)
End If
End If
End Sub