none
Multiplica mal

    Pregunta

  • Hola, me pueden ayudar a multiplicar estos valores de cada producto.

    Lo que quiero que haga es lo siguiente:

    Producto 1  Cant: 2 Precio: 10

    Producto 2  Cant: 3 Precio: 5

    Así quiero que me muestre:

    Producto     Cantidad    Precio  Subtotal

    Producto 1      2               10          20

    Producto 1      3               5           15

    El codigo que tengo es:

      Dim Subtotal As Double = 0
            For Each row As DataGridViewRow In DataGridView2.Rows
    
                           Subtotal += CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value) & vbCrLf
    
            Next
            Dim MySubtotal = Format(Subtotal.ToString) & vbCrLf

    Me muestra el total de la venta no el valor de la multiplicación de cada producto.

    El código lo uso para la impresión de un ticket.

    Saludos.

    miércoles, 23 de noviembre de 2016 14:56

Respuestas

  • La razon de que te lo calcule mal es el "+" que tienes puesto antes del "=" en el calculo del subtotla. Por eso te acumula el total de la venta.

    Si le quitas el "+", el segundo problema sera que tendras que mostrar ese Subtotal en algun sitio en todas las lineas. Podrias hacerlo asi:

        Subtotal = CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value)

        row.Cells("NombreColumna").Value = Subtotal

    Siendo, por supuesto, "NombreColumna" el nombre de la columna que previamente habras agregado al grid para contener dicho resultado.

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    miércoles, 23 de noviembre de 2016 16:15
  • Hola

    La columna subtotal es la que no se muestra?, por lo que veo en tu código no lo asignas.

    Dim Subtotal As Double = 0 For Each row As DataGridViewRow In DataGridView2.Rows Dim subtotalProducto as Double=0 subtotalProducto = CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value) & vbCrLf subtotal+=subtotalProducto

    row.Cells("TuColumnaDelSubTotal").Value=subtotalProducto Next Dim MySubtotal = Format(Subtotal.ToString) & vbCrLf



    Saludos

    • Editado Norberto Agustin miércoles, 23 de noviembre de 2016 16:18
    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    miércoles, 23 de noviembre de 2016 16:18
  • Hola Pedro9089,

    Puedes mostrar imagen de tu DataGridView con los datos ?

    Multiplicar valores (pregunta duplicada)

    La verdad tu explicación no es muy convincente, si quieres obtener la multiplicación de precio * cantidad de cada producto (cada fila del DataGridView) el código mostrado no es el correcto ya que en tu variable SubTotal lo que haces es almacenar la multiplicación de precio * cantidad de todas las filas del DGV.

    Dim Subtotal As String = String.Empty
    For Each row As DataGridViewRow In DataGridView2.Rows
        Subtotal += CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value) & vbCrLf
    Next
    
    MessageBox.Show(Subtotal)

    Resultado : Esto es lo que deseas ?

    [-] .... Así quiero que me muestre ..

    Pero quieres que te muestre así en tu DataGridView o quieres crear una estructura de una tabla en una cadena (lo menciono porque mencionas ticket) ?

    Dim data As String = String.Empty
    For Each row As DataGridViewRow In DataGridView2.Rows
        data += String.Format("{0,5} {1,5} {2,5} {3,5}{4}",
                                    row.Cells("Producto").Value,
                                    row.Cells("Cantidad").Value,
                                    row.Cells("Precio").Value,
                                    CDbl(row.Cells("Cantidad").Value) * CDbl(row.Cells("Precio").Value),
                                    vbCrLf)
    Next
    
    MessageBox.Show(data)

    Resultado :

    Si añades imágenes para un entendimiento mejor ?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    miércoles, 23 de noviembre de 2016 16:22

Todas las respuestas

  • La razon de que te lo calcule mal es el "+" que tienes puesto antes del "=" en el calculo del subtotla. Por eso te acumula el total de la venta.

    Si le quitas el "+", el segundo problema sera que tendras que mostrar ese Subtotal en algun sitio en todas las lineas. Podrias hacerlo asi:

        Subtotal = CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value)

        row.Cells("NombreColumna").Value = Subtotal

    Siendo, por supuesto, "NombreColumna" el nombre de la columna que previamente habras agregado al grid para contener dicho resultado.

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    miércoles, 23 de noviembre de 2016 16:15
  • Hola

    La columna subtotal es la que no se muestra?, por lo que veo en tu código no lo asignas.

    Dim Subtotal As Double = 0 For Each row As DataGridViewRow In DataGridView2.Rows Dim subtotalProducto as Double=0 subtotalProducto = CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value) & vbCrLf subtotal+=subtotalProducto

    row.Cells("TuColumnaDelSubTotal").Value=subtotalProducto Next Dim MySubtotal = Format(Subtotal.ToString) & vbCrLf



    Saludos

    • Editado Norberto Agustin miércoles, 23 de noviembre de 2016 16:18
    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    miércoles, 23 de noviembre de 2016 16:18
  • Hola Pedro9089,

    Puedes mostrar imagen de tu DataGridView con los datos ?

    Multiplicar valores (pregunta duplicada)

    La verdad tu explicación no es muy convincente, si quieres obtener la multiplicación de precio * cantidad de cada producto (cada fila del DataGridView) el código mostrado no es el correcto ya que en tu variable SubTotal lo que haces es almacenar la multiplicación de precio * cantidad de todas las filas del DGV.

    Dim Subtotal As String = String.Empty
    For Each row As DataGridViewRow In DataGridView2.Rows
        Subtotal += CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value) & vbCrLf
    Next
    
    MessageBox.Show(Subtotal)

    Resultado : Esto es lo que deseas ?

    [-] .... Así quiero que me muestre ..

    Pero quieres que te muestre así en tu DataGridView o quieres crear una estructura de una tabla en una cadena (lo menciono porque mencionas ticket) ?

    Dim data As String = String.Empty
    For Each row As DataGridViewRow In DataGridView2.Rows
        data += String.Format("{0,5} {1,5} {2,5} {3,5}{4}",
                                    row.Cells("Producto").Value,
                                    row.Cells("Cantidad").Value,
                                    row.Cells("Precio").Value,
                                    CDbl(row.Cells("Cantidad").Value) * CDbl(row.Cells("Precio").Value),
                                    vbCrLf)
    Next
    
    MessageBox.Show(data)

    Resultado :

    Si añades imágenes para un entendimiento mejor ?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    miércoles, 23 de noviembre de 2016 16:22
  • Este seria el data grid de donde se imprimiría el ticket.

    Así es como me lo muestra mal. 

    Quiero que me lo muestre como lo mencionas aca 

    Saludos.
    • Editado Federico32113 miércoles, 23 de noviembre de 2016 16:49
    miércoles, 23 de noviembre de 2016 16:38
  • que acaso no te falta una columna para el subtotal?

    miércoles, 23 de noviembre de 2016 17:19