Visual Basic.NET - operaciones en data grid view

 
Vista:
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 02/12/2019 18:19:59
Captura

Hola buenas tardes. como estan?

lo que adjunte en la imagen es un data grid view. en este caso se puede observar dos clientes con el problema que tengo, vayamos a un caso puntual del ultimo cliente (01C).

Lo que necesitaría seria poder restarle al importe con tipo de pago 2, el importe del tipo de pago 1.

esto es un txt que se carga en el data grid view por eso quiero hacer las cuentas en la grilla. me ayudan por favor?
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: 2.107
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Phil Rob (508 intervenciones) el 03/12/2019 11:12:28
Hola,

Con cuales informaciones eliges dos líneas del DGV (DataGridView) ? ?es misma "Cuenta", o mismo "Client", o mismo "Client + Cuenta" ?
Cuando podemos leer dos buenas líneas, podemos leer las celdas que gustamos, y calcular y cambiar los valores.

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
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 03/12/2019 13:12:14
Hola buen día. Gracias por contestar . Es indistinto porque la cuenta es el número del cliente. Así que puede ser cualquiera de las dos
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: 2.107
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Phil Rob (508 intervenciones) el 03/12/2019 17:53:37
Hola,

Si he comprendido bien, el código siguiente debía te ayudar :

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
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
 
    Dim CuentaClientABuscar As String
 
    Dim IndiceColumnaCuenta As Integer = 2
    Dim IndiceColumnaTipoPago As Integer = 3   ' este variable no es utilizado en este ejemplo
    Dim IndiceColumnaImporte As Integer = 4
 
    Dim Importe1 As Double
    Dim Importe2 As Double
 
    ' ................................ !!! El este codigo, el DGV se llama MiDGV
 
    ' Por testar :
    CuentaClientABuscar = "20174986127"
 
    ' Buscar primera linea :
 
    For L As Integer = 0 To MiDGV.Rows.Count - 2   ' Escribir -1 si no existe una ultima linea vacia
        If MiDGV.Item(IndiceColumnaCuenta, L).Value = CuentaClientABuscar Then
            Importe2 = CType(MiDGV.Item(IndiceColumnaImporte, L).Value, Double)
            Importe1 = CType(MiDGV.Item(IndiceColumnaImporte, L + 1).Value, Double)
 
            ' Aqui, hacer todos los calculos que te gustan y dar los neuvos valores a Importe1 y Importe2
            ' ... ... ...
            ' Importe2 = ...
            ' Importe1 = ...
 
            ' Escribir los nuevos valores en el DVG
            MiDGV.Item(IndiceColumnaImporte, L).Value = Importe2.ToString
            MiDGV.Item(IndiceColumnaImporte, L).Value = Importe1.ToString
 
            Exit For
        End If
    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
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 04/12/2019 11:37:15
Hola philp gracias por tu ayuda. Mirá, no me sirvió, yo necesitaría que esto sea automático que si el client o cuenta (que son lo mismo) tengan tipo de pago 1 se le reste el monto de ese importe al importe de tipo de pago 2.

Si el cliente o cuenta no tiene tipo de pago 1 dejarlo como está

En un data grid view puedo tener distintos clientes con con tipo de pago 1 y tipo de pago 2 y distintos importes.

Espero me entiendas. Muchas gracias señor
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: 2.107
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Phil Rob (508 intervenciones) el 04/12/2019 17:06:29
Hola,

He escrido 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
Private Sub AdjustarImpote2(ByVal CuentaClient As String)
    Dim CuentaClientABuscar As String
 
    Dim IndiceColumnaCuenta As Integer = 2
    Dim IndiceColumnaTipoPago As Integer = 3   ' este variable no es utilizado en este ejemplo
    Dim IndiceColumnaImporte As Integer = 4
 
    Dim Importe1 As Double
    Dim Importe2 As Double
 
    ' ................................ !!! El este codigo, el DGV se llama MiDGV
 
    ' Por testar :
    CuentaClientABuscar = CuentaClient
 
    ' Buscar primera linea :
 
    For L As Integer = 0 To MiDGV.Rows.Count - 2   ' Escribir -1 si no existe una ultima linea vacia
        If MiDGV.Item(IndiceColumnaCuenta, L).Value = CuentaClientABuscar Then
            Importe2 = CType(MiDGV.Item(IndiceColumnaImporte, L).Value, Double)
            If CType(MiDGV.Item(IndiceColumnaTipoPago, L + 1).Value, Integer) = 1 Then
                Importe1 = CType(MiDGV.Item(IndiceColumnaImporte, L + 1).Value, Double)
                Importe2 -= Importe1
                MiDGV.Item(IndiceColumnaImporte, L).Value = Importe2.ToString
                MiDGV.Item(IndiceColumnaImporte, L).Value = Importe1.ToString
            End If
            Exit For
        End If
    Next
 
End Sub

Tienes que llamar este proccedimiento a cada linea añadida en DGV, con el CuentaClient que es añadido.

Atención, existen problemas :
El proceso debe tratar solo el ultima línea (podemos cambiar para tratar los 2 ultimas líneas), no cambiar el mismo cliente registrado antes.
El último cliente registrado pode tener un tipo 2 y el tipo 1 viniera más tarde.

Como veas este detalles ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 05/12/2019 19:53:04
hola buenas tardes! me sirvió !!!! dejo aca como lo modifique para que me de correctamente
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
button1
 For Each item As DataGridViewRow In DataGridView22.Rows
 
            If (item.Cells("CUENTAA").Value > 1 And item.Cells("TIPODEPAGO").Value = 1) Then
                cuentacuil = item.Cells("CUENTAA").Value
 
            End If
            AjustarImporte2(cuentacuil)
            cuentacuil = 0
        Next
end boton
 
    Private Sub AjustarImporte2(ByVal cuentacuil As String)
        Dim CuentaClientABuscar As String
 
        Dim IndiceColumnaCuenta As Integer = 2
        Dim IndiceColumnaTipoPago As Integer = 4
        Dim IndiceColumnaImporte As Integer = 5
        Dim resul
        Dim Importe1 As Double
        Dim Importe2 As Double
 
        CuentaClientABuscar = cuentacuil
 
 
 
        For L As Integer = 0 To DataGridView22.Rows.Count - 2
            If DataGridView22.Item(IndiceColumnaCuenta, L).Value = CuentaClientABuscar Then
                Importe2 = CType(DataGridView22.Item(IndiceColumnaImporte, L).Value, Double)
                If CType(DataGridView22.Item(IndiceColumnaTipoPago, L + 1).Value, Integer) = 1 Then
                    Importe1 = CType(DataGridView22.Item(IndiceColumnaImporte, L + 1).Value, Double)
                    resul = Importe2 - Importe1
                    DataGridView22.Item(IndiceColumnaImporte, L).Value = resul
                    'DataGridView22.Item(IndiceColumnaImporte, L).Value = Importe1.ToString
                    ' DataGridView22.Item(IndiceColumnaImporte, L).Value = Format(resul, "##.00##")
                End If
                Exit For
            End If
        Next
    End Sub
End Class


ahora tengo una duda mas. el resultado me sale correctamente pero a los dos ultimos numeros los necesito con un punto no el valor entero. EJEMPLO: 12038894 -----> 120388.94 (ese punto necesito q siempre salga en los ultimos dos como puedo hacerlo)
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: 2.107
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Phil Rob (508 intervenciones) el 06/12/2019 11:49:20
Hola,

La función para formatear que es necesario es : String.Format("{0:##0.00}", Un_Valor_De_Tipo_Single_o_Double)

Ejemplo en tu código :
1
DataGridView22.Item(IndiceColumnaImporte, L).Value = String.Format("{0:##0.00}", resul)

Atencion, debes declarar completamente los variables y la variable resul es Double : Dim resul As Double


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
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 06/12/2019 12:58:42
hola, probé lo q me mandaste y me da este resultado 12038894,00

no me pone un punto y me agrega dos ceros yo necesito q los ultimos dos digitos del numero sean los centa. 120388.94

jaja re molesto. gracias
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: 2.107
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Phil Rob (508 intervenciones) el 06/12/2019 13:23:29
Hola,

Mi formula es correcta. Probas la con dos TextBox y un Boton :

1
2
3
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        TextBox2.Text = String.Format("{0:##0.00}", CType(TextBox1.Text, Double))
End Sub

Si el erro siempre es como tu ejemplo, prabas :
1
DataGridView22.Item(IndiceColumnaImporte, L).Value = String.Format("{0:##0.00}", resul/100)

Sin embargo, probablemente que los valores iniciales no están correctamente escribido.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 06/12/2019 15:36:52
buenas. muchas gracias asunto solucionado.

lo que me pasaste funcionó, pero me salia con , no con .

por ello hice esto:

DataGridView22.Item(IndiceColumnaImporte, L).Value = String.Format("{0:##0.00}", resul / 100).Replace(",", ".")

espero que a alguien le sirva. te agradezco mucho. saludos!
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: 2.107
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Phil Rob (508 intervenciones) el 06/12/2019 16:34:40
Comprendo ...

Penso que teines que usar este formula en otro lugar :

1
2
3
4
5
6
If DataGridView22.Item(IndiceColumnaCuenta, L).Value = CuentaClientABuscar Then
                Importe2 = CType(DataGridView22.Item(IndiceColumnaImporte, L).Value.ToString.Replace(",","."), Double)
                If CType(DataGridView22.Item(IndiceColumnaTipoPago, L + 1).Value, Integer) = 1 Then
                    Importe1 = CType(DataGridView22.Item(IndiceColumnaImporte, L + 1).Value.ToString.Replace(",","."), Double)
                    resul = Importe2 - Importe1
                    DataGridView22.Item(IndiceColumnaImporte, L).Value = String.Format("{0:##0.00}", resul)

En otra manera, tendrás errores y la operación /100 no es buena idea (estaba es mi idea ).
.
Tienes que tener los mismos tipos de escriture en el DGV ...



ComaPunto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 28
Ha aumentado su posición en 34 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

operaciones en data grid view

Publicado por Agustin (11 intervenciones) el 08/01/2020 20:54:20
Hola vuelvo después de un tiempo por un motivo

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
'AQUI SE REALIZA LA CUENTA DEL IMPORTE TOTAL CUANDO EL TIPO DE PAGO ES 2 MENOS EL IMPORTE DE TIPO DE PAGO 1
Private Sub AjustarImporte2(ByVal cuentacuil As String)
    Dim CuentaClientABuscar As String
 
    Dim IndiceColumnaCuenta As Integer = 2
    Dim IndiceColumnaTipoPago As Integer = 4   ' este variable no es utilizado en este ejemplo
    Dim IndiceColumnaImporte As Integer = 5
    Dim resul As Double
    Dim Importe1 As Double
    Dim Importe2 As Double
 
    CuentaClientABuscar = cuentacuil
 
    For L As Integer = 0 To DataGridView22.Rows.Count - 2   ' Escribir -1 si no existe una ultima linea vacia
        If DataGridView22.Item(IndiceColumnaCuenta, L).Value = CuentaClientABuscar Then
            Importe2 = CType(DataGridView22.Item(IndiceColumnaImporte, L).Value, Double)
            If CType(DataGridView22.Item(IndiceColumnaTipoPago, L + 1).Value, Integer) = 1 Then
                Importe1 = CType(DataGridView22.Item(IndiceColumnaImporte, L + 1).Value, Double)
                resul = Importe2 - Importe1
 
                DataGridView22.Item(IndiceColumnaImporte, L).Value = String.Format("{0:##0.00}", resul / 100).Replace(",", ".")
 
            End If
            Exit For
        End If
    Next
 
End Sub
 
 
'este es el codigo que llama a esa funcion
 
For Each item As DataGridViewRow In DataGridView22.Rows
 
    If (item.Cells("CUENTAA").Value > 1 And item.Cells("TIPODEPAGO").Value = 1) - 1 Then
        cuentacuil = item.Cells("CUENTAA").Value
        AjustarImporte2(cuentacuil)
    Else
        SOLO_VALOR = 45
    End If
 
Next

lo que sucede es que me hace la resta como 3 veces en cada cuenta, cuando la tiene que hacer solo una vez. espero puedas ayudarme. muchas gracias.
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