Visual Basic.NET - SUMAR VALOR DE UN DATAGRID.

 
Vista:
Imágen de perfil de melqui
Val: 643
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por melqui (242 intervenciones) el 08/06/2020 14:26:31
Hola amigos como estan?
pues necesito una pequeña ayuda, yo creo que no es nada dificil, pues ya lo habia hecho anteriormente mas no recuerdo, necesito sumar el valor de una linea del datagrid, cuando introduzco el mismo produto. no quiero crear una nueva linea mas si solamente validar si ese produto existe en el datagrid solamente sume la cuantidad y el subtotal
el ejemplo de la imagen lo que estoy usando,

Screenshot_1


mas no la quiero de esa forma solamente necesito que si existe el producto ya en el datagrid solamente suma el valor.

Screenshot_2

estoy intentando de varias formas mas no me sale.

desde ya agradezco la ayuda de todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por Phil Rob (1554 intervenciones) el 08/06/2020 15:00:33
Hola Melqui,

Este codigo deberia te servir :

1
2
3
4
5
6
Dim IndexLinea As Integer
Dim IndexColumna As Integer = 3 ' 3 segun tu imagen, este es el numero de la columna con los valores
Dim Total As Double = 0
For IndexLinea = 0 To DGV.Rows.Count - 1 ' -2 si existe la ultiam linea es vacia, nop es el caso sobre tu imagen
    Total += CType(DGV.Item(IndexColumna, IndexLinea).Value, Double)
Next

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de melqui
Val: 643
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por melqui (242 intervenciones) el 08/06/2020 16:02:58
hola phil,

espero que te encuentre bien, mira no ese procedimiento es para sumar la coluna total?

si es asi, no es lo que necesito, lo que necesito es en el subtotal de la linea del producto creciente se sume solamente el valor ya existente + el valor nuevo,

ejemplo

si el produto es el codigo 2 y la cuantidad es 3 y el valor total es 10 si yo introduzco el mismo codigo con 3 itens mas, seria asi la nueva cantidad y suma del total

codigo 2 cuantidad 6 valor total 20

tente seguir tu ejemplo creo que estoy errando,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim IndexLinea As Integer = frmReg_OrdemServico.DgvDadoProdutos.Rows.Add
Dim IndexColumna As Integer = frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("QTDE").Value
Dim Total As Double = frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("VALSUBTOT").Value
 
For IndexLinea = 0 To frmReg_OrdemServico.DgvDadoProdutos.Rows.Count - 1
 
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("CODSOLSER").Value = frmReg_OrdemServico.txtCod_OS.Text 'codigo del servicio
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("CODUNIPRO").Value = OBJ_PROD.Codigo_Unico 'codigo unico del producto
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("CODPRO").Value = txtCodProduto.Text 'codigo del produto /o el codigo de barra
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("NOMPROD").Value = lblNomeProduto.Text 'nombre o descripcion del producto
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("VALUNI").Value = (lblValUnitario.Text) 'valor unitario
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("QTDE").Value = (txtQtde.Text) 'cuantidad del producto
    frmReg_OrdemServico.DgvDadoProdutos.Rows.Item(IndexLinea).Cells("VALSUBTOT").Value = (lblValSubTotal.Text) 'valor subtotal
 
 
    Total += CType(frmReg_OrdemServico.DgvDadoProdutos.Item(IndexColumna, IndexLinea).Value, Double)
Next
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por Phil Rob (1554 intervenciones) el 08/06/2020 18:03:35
Hola,

Comprendo el problema de los sutotales. He hecho un ejemplo donde calculo el subtotal de los "Cantidad" y el subtotal de los "Valor".
Adjunto mi proyecto de pruebas para ti testar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
    If DataGridView1.Rows.Count < 1 Then Exit Sub ' error si ninguna linea en DGV
 
    ' Ordenar DGV segun la columna llave
    ' Este es la columna llamada C0 en mi ejemplo
    DataGridView1.Sort(DataGridView1.Columns("C0"), System.ComponentModel.ListSortDirection.Ascending)
 
    ' Copiamos todas las lineas de DataGridView1 en DataGridView2, sin los duplocados, con los subtotales (de la columna C2 en mi ejemplo)
 
    Dim Llave As String = Nothing
    Dim LlaveAnterior As String = Nothing
    Dim Cantidad As Integer = 0 ' este es la cantidad a sumar (columna C1 en este ejemplo)
    Dim Valor As Double = 0 ' este es la valor a sumar (columna C2 en este ejemplo
 
    For R As Integer = 0 To 1 + (DataGridView1.Rows.Count - 2)   ' escribir -1 si  no ultima linea vacia en el DataGridView1
        Llave = DataGridView1.Item("C0", R).Value
        If Llave <> LlaveAnterior And Not LlaveAnterior Is Nothing Then
            ' Aqui, tienes los totales de Cantidad y Valor para las lineas que tienen la misma llave
            DataGridView2.Rows.Add(LlaveAnterior, Cantidad, Valor)   ' puedes hacer otra cosa que copiar en DGV2
            Valor = 0
            Cantidad = 0
        End If
        Valor += CType(DataGridView1.Item("C2", R).Value, Double)
        Cantidad += CType(DataGridView1.Item("C1", R).Value, Integer)
        LlaveAnterior = Llave
    Next
End Sub

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de melqui
Val: 643
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por melqui (242 intervenciones) el 08/06/2020 20:09:01
buena ideal phil,
mas ai tendria que usar 2 datagridview, algo que no es necesario en mi caso,
porque la verdad todo lo que necesito es apenas la validacion del mismo condigo dentro del datagrid.
como coloque el ejemplo.
yo ya habia hecho esa parte solo no recuerdo pues el proyecto que tenia acabe perdiendo en una cuenta en el mega.

creo en mi logica
era apenas si el codigo existe en el datagrid, apenas actualizar los resultados, si no exitia en el datagrid crear una nueva linea.
basicamente era ese paso, yo lo validava conforme el condigo que hacia la consulta y el codigo que estaba en el datagrid.
conforme print

Screenshot_1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por Phil Rob (1554 intervenciones) el 08/06/2020 20:42:59
OK, no puedes copiar en un segundo DGV. Pero este estaba un ejemplo.

Pero, quieres "la validacion del mismo condigo dentro del datagrid". Pues, para dos lineas con el mismo codigo, debes suprimir una linea y modificar la segunda con los valores sumados.

Para hacer facil, que pensas de copiar en un DataGridView2 no visible y tras el tratamento, suprimir todas lineas del DataGridView1 y llas reemplazar por estas del DataGridView2. El DataGridView2 servira de datos temporal.
Si este te gusta, puedo lo hacer despues, tras la 10 pm (ahora aqui, este es la 8h45 pm).

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por Phil Rob (1554 intervenciones) el 08/06/2020 22:45:24
Hola,

Puedes añadir un botón en el Form de mi proyecto de pruebas y este es el procedimiento :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    If DataGridView1.Rows.Count < 1 Then Exit Sub ' error si ninguna linea en DGV
 
    ' Crear DGVTemporal
    Dim DGVTemporal As New DataGridView
    DGVTemporal.AllowUserToAddRows = False
    DGVTemporal.Columns.Add("C0", "C0")
    DGVTemporal.Columns.Add("C1", "C1")
    DGVTemporal.Columns.Add("C2", "C2")
 
    ' Ordenar DGV segun la columna llave
    ' Este es la columna llamada C0 en mi ejemplo
    DataGridView1.Sort(DataGridView1.Columns("C0"), System.ComponentModel.ListSortDirection.Ascending)
 
    ' Copiamos todas las lineas de DataGridView1 en DGVTemporal, sin los duplicados, con los subtotales (de la columna C2 en mi ejemplo)
 
    Dim Llave As String = Nothing
    Dim LlaveAnterior As String = Nothing
    Dim Cantidad As Integer = 0 ' este es la cantidad a sumar (columna C1 en este ejemplo)
    Dim Valor As Double = 0 ' este es la valor a sumar (columna C2 en este ejemplo
 
    For R As Integer = 0 To 1 + (DataGridView1.Rows.Count - 2)   ' escribir -1 si  no ultima linea vacia en el DataGridView1
        Llave = DataGridView1.Item("C0", R).Value
        If Llave <> LlaveAnterior And Not LlaveAnterior Is Nothing Then
            ' Aqui, ponemos resultados en DGVTemporal
            DGVTemporal.Rows.Add(LlaveAnterior, Cantidad, Valor)
            Valor = 0
            Cantidad = 0
        End If
        Valor += CType(DataGridView1.Item("C2", R).Value, Double)
        Cantidad += CType(DataGridView1.Item("C1", R).Value, Integer)
        LlaveAnterior = Llave
    Next
 
    ' Vaciar DataGridView1
    DataGridView1.Rows.Clear()
 
    ' Copiar DGVTemporal en DataGridView1
    For R As Integer = 0 To DGVTemporal.Rows.Count - 1
        DataGridView1.Rows.Add()
        For C As Integer = 0 To DGVTemporal.ColumnCount - 1
            DataGridView1.Item(C, R).Value = DGVTemporal.Item(C, R).Value
        Next
    Next
 
    ' Eliminar DGVTemporal
    DGVTemporal.Dispose()

Mire este video : https://www.dropbox.com/s/skyjtxp1b32krdw/Melqui.mp4?dl=0

Ahora, reflexionare para hacer el algorithmo sin ningun DGV, pero no prometo el resultado hoy ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por Phil Rob (1554 intervenciones) el 08/06/2020 23:12:57
Este es una solucione sin DGV añadido.
Adjunto mi proyecto de pruebas para ti testar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    If DataGridView1.Rows.Count < 1 Then Exit Sub ' error si ninguna linea en DGV
 
    ' Ordenar DGV segun la columna llave
    ' Este es la columna llamada C0 en mi ejemplo
    DataGridView1.Sort(DataGridView1.Columns("C0"), System.ComponentModel.ListSortDirection.Ascending)
 
    Dim Llave As String = Nothing
    Dim LlaveAnterior As String = Nothing
    Dim Cantidad As Integer = 0 ' este es la cantidad a sumar (columna C1 en este ejemplo)
    Dim Valor As Double = 0 ' este es la valor a sumar (columna C2 en este ejemplo
 
    Dim PrimeroIndicioLineaDeLaLlave As Integer = 0
 
    ' Cambiar las primeras lineas de cada llave
    For R As Integer = 0 To 1 + (DataGridView1.Rows.Count - 2)   ' escribir -1 si  no ultima linea vacia en el DataGridView1
        Llave = DataGridView1.Item("C0", R).Value
        If Llave <> LlaveAnterior And Not LlaveAnterior Is Nothing Then
            ' Aqui, tienes los totales de Cantidad y Valor para las lineas que tienen la misma llave
            DataGridView1.Item("C2", PrimeroIndicioLineaDeLaLlave).Value = Valor
            DataGridView1.Item("C1", PrimeroIndicioLineaDeLaLlave).Value = Cantidad
            Valor = 0
            Cantidad = 0
            PrimeroIndicioLineaDeLaLlave = R
        ElseIf Not LlaveAnterior Is Nothing Then
            DataGridView1.Item("C0", R).Value = "*"
        End If
        Valor += CType(DataGridView1.Item("C2", R).Value, Double)
        Cantidad += CType(DataGridView1.Item("C1", R).Value, Integer)
        LlaveAnterior = Llave
    Next
 
    ' Eliminir las lineas duplicadas
    For R As Integer = DataGridView1.Rows.Count - 2 To 0 Step -1    ' escribir -1 si  no ultima linea vacia en el DataGridView1
        If DataGridView1.Item("C0", R).Value = "*" Then
            DataGridView1.Rows.RemoveAt(R)
        End If
    Next
 
End Sub

Buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de melqui
Val: 643
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

SUMAR VALOR DE UN DATAGRID.

Publicado por melqui (242 intervenciones) el 09/06/2020 05:30:29
hola phil,
gracias por apoyarme, lo que hiciste ese ejemplo me hizo recordar lo que estaba buscando. ai aplique la base de lo que necesitaba.

aqui dejo el codigo mejorado.

muchas gracias por tu tiempo oye disculpame realmente. un abrazo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Public Sub ADCIONAR_ITEM_PRODUTO()
 
 
 
    If txtCodProduto.Text = "0" Or txtCodProduto.Text.Length = 0 Then
        MsgBox("DÍGITE UM CÓDIGO, OU USAR OS BOTÕES DE BUSQUEDA.!", MsgBoxStyle.Information, " ARIMUYA - TECHNOLOGY SOLUTIONS ")
        Exit Sub
    ElseIf txtQtde.Text = "" Or txtQtde.Text = "0" Then
        MsgBox("VALOR QUANTIDADE DO PRODUTO [ " & lblNomeProduto.Text & " ] DEVE SER SUPERIOR A ZERO.!", MsgBoxStyle.Information, " ARIMUYA - TECHNOLOGY SOLUTIONS ")
        Exit Sub
    Else
 
        '******************************** NESTE SE APLICA AS VALIDÃÇÕES DOS ROWS ********************
        Dim X As Integer
        Dim IntValid_Item As Integer = -1
        Dim IntValidar_Linha As Integer = frmReg_OrdemServico.DgvDadoProdutos.Rows.Count - 1
        Dim IntLinha_Validado As Integer
        Dim Intcodigo_OS As Integer = frmReg_OrdemServico.txtCod_OS.Text
        For I = 0 To frmReg_OrdemServico.DgvDadoProdutos.Rows.Count - 1
            If OBJ_PROD.Codigo_Unico = frmReg_OrdemServico.DgvDadoProdutos.Rows(I).Cells("CODUNIPRO").Value Then
                IntValid_Item = I
                Exit For
            End If
        Next
 
        If IntValid_Item = -1 Then
            IntLinha_Validado = 0
            If IntLinha_Validado <= IntValidar_Linha Then
 
 
                frmReg_OrdemServico.DgvDadoProdutos.Rows.Add(Intcodigo_OS, OBJ_PROD.Codigo_Unico,
                                                             OBJ_PROD.Codigo_Prod, OBJ_PROD.Desc_Prod,
                                                             lblValUnitario.Text, txtQtde.Text,
                                                             lblValSubTotal.Text)
 
            Else
 
                frmReg_OrdemServico.DgvDadoProdutos.Rows.Add(Intcodigo_OS, OBJ_PROD.Codigo_Unico,
                                                           OBJ_PROD.Codigo_Prod, OBJ_PROD.Desc_Prod,
                                                           lblValUnitario.Text, txtQtde.Text,
                                                            lblValSubTotal.Text)
            End If
        Else
 
            IntLinha_Validado = 1
            If IntLinha_Validado <= IntValidar_Linha Then
                With frmReg_OrdemServico.DgvDadoProdutos
 
                    Dim QTDE_ATUAL As Integer = .Rows(IntValid_Item).Cells("QTDE").Value
                    Dim SUBTOTAL_ATUAL As Double = .Rows(IntValid_Item).Cells("VALSUBTOT").Value
 
                    Dim QTDE_NOVO_SALDO As Integer = QTDE_ATUAL + txtQtde.Text
                    Dim SUBTOTAL_SALDO_NOVO As Double = SUBTOTAL_ATUAL + lblValSubTotal.Text
 
                    .Rows(IntValid_Item).Cells("QTDE").Value = QTDE_NOVO_SALDO
                    .Rows(IntValid_Item).Cells("VALSUBTOT").Value = SUBTOTAL_SALDO_NOVO
                End With
            ElseIf IntLinha_Validado > IntValidar_Linha Then
 
                With frmReg_OrdemServico.DgvDadoProdutos
 
                    Dim QTDE_ATUAL As Integer = .Rows(IntValid_Item).Cells("QTDE").Value
                    Dim SUBTOTAL_ATUAL As Double = .Rows(IntValid_Item).Cells("VALSUBTOT").Value
 
                    Dim QTDE_NOVO_SALDO As Integer = QTDE_ATUAL + txtQtde.Text
                    Dim SUBTOTAL_SALDO_NOVO As Double = SUBTOTAL_ATUAL + lblValSubTotal.Text
 
                    .Rows(IntValid_Item).Cells("QTDE").Value = QTDE_NOVO_SALDO
                    .Rows(IntValid_Item).Cells("VALSUBTOT").Value = SUBTOTAL_SALDO_NOVO
                End With
 
 
            End If
 
        End If
    End If
 
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar