none
problema eliminación de un producto RRS feed

  • Pregunta

  • buenas tardes

    expertos  como soy muy novato me cuesta tengo formulario de ingreso de productos a una cotización  voy ingresados estos productos a la grilla y calcula los resultados todo bien pero al momento de eliminar el ultimo ingreso se me cae (la eliminacion de productos funciona ) pero al eliminar el ultimo producto ingresado se cae.

     Public Function MaximoNumero() As Integer
    
            Using conn As New MySqlConnection(connString)
                conn.Open()
    
                Dim query As String = "SELECT IFNULL(MAX(NumeroCotizacion),0) from cotizacion"
                Dim cmd As New MySqlCommand(query, conn)
                Dim max As Integer = Convert.ToInt32(cmd.ExecuteScalar())
    
                Return max + 1
            End Using
    
        End Function
    

    Protected Sub GridView1_RowDeleting1(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
            Dim datos As New vdetalle_cotizacion
            Dim eliminar As New fdetalle_cotizacion
    
            ' GridView1.DeleteRow(e.RowIndex)
            Dim Cod As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Values("Codigo").ToString())
    
            datos._Codigo = Cod
    
            If eliminar.EliminarDetallecotizacion(datos) Then
                'Label1.Text = "Se Elimino Detalle Cotizacion Seleccionado Correctamente"
                Call calcular()
                LLenarGrid()
                LimpiarDetalle()
            Else
                'Label1.Text = "No se puede eliminar Detalle Cotizacion Seleccionado"
            End If
            BtnAgregar.Visible = True
            BtnCancelar.Visible = False
            LimpiarDetalle()
            TxtCodigo.Focus()
    
        End Sub

     Public Function calcular() As Decimal
            Dim correlativo As New fcotizacion ' para llamar el procedimiento maximo numero 
            conn.Open()
    
            Dim query As String = "select SUM(Total) From detalle_cotizacion where Numero_Cotizacion = ?nrocotizacion"
            Dim cmd As New MySqlCommand(query, conn)
            cmd.Parameters.AddWithValue("?nrocotizacion", correlativo.MaximoNumero())
    
            Dim total As Decimal = Convert.ToDecimal(cmd.ExecuteScalar())
    
            TxtSumaTotal.Text = total.ToString()
    
            TxtTotalNeto.Text = TxtSumaTotal.Text
    
            TxtIva.Text = Convert.ToString(Math.Round(TxtTotalNeto.Text * (19 / 100), 0))
            Dim suma As Decimal = Convert.ToDecimal(TxtTotalNeto.Text) + Convert.ToDecimal(TxtIva.Text)
            TxtTotalCotizacion.Text = Convert.ToString(Math.Round(suma, 2))
    
    
            Return total
            conn.Close()

    lunes, 15 de junio de 2015 15:49

Respuestas

Todas las respuestas

  • Hola djnilo podrías probar el código que emite tu string query directamente en MySql y ver que es lo que esta retornando, podrías también agregar esta parte de código en tu método Calcular():

    Public Function calcular() As Decimal
            Dim correlativo As New fcotizacion ' para llamar el procedimiento maximo numero 
            conn.Open()
    
            Dim query As String = "select SUM(Total) From detalle_cotizacion where Numero_Cotizacion = ?nrocotizacion"
            Dim cmd As New MySqlCommand(query, conn)
            cmd.CommandType = CommandType.Text
            cmd.Parameters.AddWithValue("?nrocotizacion", correlativo.MaximoNumero())
    
            Dim total As Decimal = Convert.ToDecimal(cmd.ExecuteScalar())
    
            TxtSumaTotal.Text = total.ToString()
    
            TxtTotalNeto.Text = TxtSumaTotal.Text
    
            TxtIva.Text = Convert.ToString(Math.Round(TxtTotalNeto.Text * (19 / 100), 0))
            Dim suma As Decimal = Convert.ToDecimal(TxtTotalNeto.Text) + Convert.ToDecimal(TxtIva.Text)
            TxtTotalCotizacion.Text = Convert.ToString(Math.Round(suma, 2))
    
    
            Return total
            conn.Close()

    Otra posible baja sea lo que esta retornando el método llamado Correlativo.MaximoNumero(), deberias ver que es lo que te esta retornando quiza te esta retornando un id que aun no ha sido registrado y es por ello que te retorna null y al momento de convertir a decimal te muestra dicho error.

    Espero haberte ayudado.


    lunes, 15 de junio de 2015 16:09
  • hola

    podrias usar

    Dim query As String = "select SUM(Total) From detalle_cotizacion where Numero_Cotizacion = ?nrocotizacion" Dim cmd As New MySqlCommand(query, conn)

    cmd.Parameters.AddWithValue("?nrocotizacion", correlativo.MaximoNumero())

    Dim result As Object = cmd.ExecuteScalar();

    Dim total As Decimal = 0

    If result IsNot DbNull.Value Then total = Convert.ToDecimal(result)

    End If

    o sea debes validar si el valor es nulo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 15 de junio de 2015 16:27
  • tambien podrias aplicar la validacion directo en la query

    Dim query As String = "select IFNULL(SUM(Total), 0) From detalle_cotizacion where Numero_Cotizacion = ?nrocotizacion"

    Introduction to MySQL IFNULL function

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta djnilo lunes, 15 de junio de 2015 16:55
    lunes, 15 de junio de 2015 16:29
  • muchas gracias por responde leandro hay no se cayo 
    lunes, 15 de junio de 2015 16:56
  • gracias por responder Aldair Cosetito pero lo solucione como dijo leandro

    Dim query As String = "select IFNULL(SUM(Total), 0) From detalle_cotizacion where Numero_Cotizacion = ?nrocotizacion"

    lunes, 15 de junio de 2015 16:57