DataGridView (Visual Net)

0 votos
preguntado por PRT147 (140 puntos) Feb 16, 2016 en .Net
Hola a todos, tengo un DataGridView llamado "datacartera" con dos columnas, una llamada "enviar" y la otra "monto", enviar es de tipo CheckBox y en la columna "monto" siempre contiene valores decimales. Lo que necesito lograr es que se sumen unicamente los valores de las filas seleccionadas desde la columna "enviar" , es decir si tengo tres filas, por ejemplo:

enviar     monto
     x           120,05
                   30,63
     x           140,89

Selecciono la primera y la tercera, necesito que al presionar el btnfinalizar(Botón) me devuelva el valor sumado al ltotal (TextBox), a continuación les detallo mi código que me tira el sig. error al presionar el Botón:

Excepción no controlada del tipo 'System.InvalidCastException' en Microsoft.VisualBasic.dll

Información adicional: La conversión de la cadena "#0.00" en el tipo 'Integer' no es válida.

ltotal.Text = total.ToString("#0.00")

Mi Código:

 Private Sub datacartera_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles datacartera.CellContentClick
        If e.ColumnIndex = Me.datacartera.Columns.Item("enviar").Index Then
            Dim chkcell As DataGridViewCheckBoxCell = Me.datacartera.Rows(e.RowIndex).Cells("enviar")
            chkcell.Value = Not chkcell.Value
        End If
    End Sub
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Private Sub btnfinalizar_Click(sender As Object, e As EventArgs) Handles btnfinalizar.Click
        For Each row As DataGridViewRow In datacartera.Rows
            Dim marcado As Boolean = Convert.ToBoolean(row.Cells("enviar").Value)

            If marcado Then
                Dim suma_marcado As String
                Dim total As Decimal = 0D

                suma_marcado = row.Cells("monto").Value

                'Eliminamos los puntos
                suma_marcado = Replace(suma_marcado, ".", "")

                'Reemplazamos las comas
                suma_marcado = Replace(suma_marcado, ",", ".")

                total += Val(suma_marcado)
            End If
        Next
        ltotal.Text = total.ToString("#0.00")
    End Sub

Muchas gracias de antemano y espero puedan enviarme el código correcto. Saludos

1 Respuesta

0 votos
respondido por Daniel Barrera Reyna (580 puntos) Jun 5, 2016

Bueno yo no se mucho de VB pero en C# he hecho algo como lo siguiente:
Le asignas al checkbox un CommandEventHandler y en el CommandArgument le asignas el monto que vas sumar, asi, cuando selecciones el checkbox activara el evento y que debes recibir dos prametros el sender As Object y e As CommandEventArgs.

El primero lo casteas por el checkbox y obtienes el valor que tiene y el segundo lo casteas por el monto que tenias en la fila, después con un if verificas si el checkbox estaba seleccionado haces la suma, y si no pues nada.

Espero te sirva para lo que necesitabas, también te dejo esta documentación:
https://msdn.microsoft.com/es-es/library/office/system.web.ui.webcontrols.commandeventhandler(v=vs.85)?cs-save-lang=1&cs-lang=vb

Preguntas relacionadas

0 votos
0 respuestas
preguntado por PRT147 (140 puntos) Feb 29, 2016 en .Net
0 votos
0 respuestas
preguntado por pameloza (120 puntos) Ene 28, 2016 en .Net
0 votos
0 respuestas
preguntado por mrk (120 puntos) Ene 28, 2016 en .Net
0 votos
2 respuestas
preguntado por crazyzero (140 puntos) Ene 28, 2016 en .Net
0 votos
0 respuestas
preguntado por framework (160 puntos) Ene 28, 2016 en .Net
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código
...