Autor Tema: Visual Basic evento CellValueChanged en datagridview y sumar fila (sumatorio)  (Leído 9880 veces)

Mary

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Hola,
Tengo que sumar una fila en un datagridview similar a la siguiente:

Columna 1  columna 2    Columna 3   Columna 4      Columna 5
      As.            Re.                1,2             0,15
      Po.            Fu.                0,12
      Po.            Re.                                  4,5
      As.            Lo.                1,56            3,56

Los valores de la columna 1 y 2 son letras pero los valores de las columnas 3 y 4 son numéricos. La idea es que cuando modificó o introduzco un dato en las columnas 3 o 4, automáticamente aparezca la suma en la columna 5.

El datagridview esta enlazado a una base de datos sql.

He estado buscando por los foros y aparte de que todo lo que encuentro es para sumar columnas, no se cómo aplicar la función SUM a mi caso particular.

Alguien sabe o tiene alguna idea de cómo podría hacerse esto?

Espero alguien pueda ayudarme...
« Última modificación: 05 de Agosto 2015, 11:12 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Podrías basarte en detectar el cambio en una celda del datagridview con el evento CellValueChanged

Código: [Seleccionar]
   Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
       'Aquí el código con las acciones a realizar
    End Sub


Además necesitarás es detectar si el cambio afecta a la columna 3 (índice 2) ó a la columna 4 (índice 3):

Código: [Seleccionar]
If DataGridView.CurrentCell.ColumnIndex = 2 or DataGridView.CurrentCell.ColumnIndex = 3 then

End If

Tendrías:

Código: [Seleccionar]
   Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
If DataGridView.CurrentCell.ColumnIndex = 2 or DataGridView.CurrentCell.ColumnIndex = 3 then
'Aquí el código con las acciones a realizar
End If       
    End Sub

Y dentro del código de las acciones a realizar tendrás que hacer que el valor de la columna 5 sea el resultado de sumar las columnas 3 y 4 de esa misma fila.

Pega el código si logras solucionarlo o si no lo logras el código que hayas podido crear para ir orientándote

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Mary

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Hola,
en primer lugar, gracias por responder. Apliqué el código que me sugeriste y después añadí código para que hiciera las sumas. Al final me quedo de la siguiente forma:

Código: [Seleccionar]
If DataGridView23.CurrentCell.ColumnIndex = 21 Or DataGridView23.CurrentCell.ColumnIndex = 22 Then

                DataGridView23.CurrentRow.Cells(21).Value = DataGridView23.CurrentRow.Cells(21).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(22).Value = DataGridView23.CurrentRow.Cells(22).Value.ToString.Replace(".", ",")

                DataGridView23.CurrentRow.Cells(5).Value = DataGridView23.CurrentRow.Cells(5).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(6).Value = DataGridView23.CurrentRow.Cells(6).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(7).Value = DataGridView23.CurrentRow.Cells(7).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(8).Value = DataGridView23.CurrentRow.Cells(8).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(9).Value = DataGridView23.CurrentRow.Cells(9).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(10).Value = DataGridView23.CurrentRow.Cells(10).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(11).Value = DataGridView23.CurrentRow.Cells(11).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(12).Value = DataGridView23.CurrentRow.Cells(12).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(13).Value = DataGridView23.CurrentRow.Cells(13).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(14).Value = DataGridView23.CurrentRow.Cells(14).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(15).Value = DataGridView23.CurrentRow.Cells(15).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(16).Value = DataGridView23.CurrentRow.Cells(16).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(17).Value = DataGridView23.CurrentRow.Cells(17).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(18).Value = DataGridView23.CurrentRow.Cells(18).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(19).Value = DataGridView23.CurrentRow.Cells(19).Value.ToString.Replace(".", ",")
                DataGridView23.CurrentRow.Cells(20).Value = DataGridView23.CurrentRow.Cells(20).Value.ToString.Replace(".", ",")




                If String.IsNullOrEmpty(DataGridView23.CurrentRow.Cells(21).Value) And Not String.IsNullOrEmpty(DataGridView23.CurrentRow.Cells(22).Value) Then
                    Dim total As Double
                    total = CDbl(DataGridView23.CurrentRow.Cells(5).Value) + CDbl(DataGridView23.CurrentRow.Cells(6).Value) + CDbl(DataGridView23.CurrentRow.Cells(7).Value) + CDbl(DataGridView23.CurrentRow.Cells(8).Value) + CDbl(DataGridView23.CurrentRow.Cells(9).Value) + CDbl(DataGridView23.CurrentRow.Cells(10).Value) + CDbl(DataGridView23.CurrentRow.Cells(11).Value) + CDbl(DataGridView23.CurrentRow.Cells(12).Value) + CDbl(DataGridView23.CurrentRow.Cells(13).Value) + CDbl(DataGridView23.CurrentRow.Cells(14).Value) + CDbl(DataGridView23.CurrentRow.Cells(15).Value) + CDbl(DataGridView23.CurrentRow.Cells(16).Value) + CDbl(DataGridView23.CurrentRow.Cells(17).Value) + CDbl(DataGridView23.CurrentRow.Cells(18).Value) + CDbl(DataGridView23.CurrentRow.Cells(19).Value) + CDbl(DataGridView23.CurrentRow.Cells(20).Value) + CDbl(DataGridView23.CurrentRow.Cells(22).Value)

                    DataGridView23.CurrentRow.Cells(23).Value = total.ToString("n2")

                End If



                If String.IsNullOrEmpty(DataGridView23.CurrentRow.Cells(22).Value) And Not String.IsNullOrEmpty(DataGridView23.CurrentRow.Cells(21).Value) Then
                    Dim total As Double
                    total = CDbl(DataGridView23.CurrentRow.Cells(5).Value) + CDbl(DataGridView23.CurrentRow.Cells(6).Value) + CDbl(DataGridView23.CurrentRow.Cells(7).Value) + CDbl(DataGridView23.CurrentRow.Cells(8).Value) + CDbl(DataGridView23.CurrentRow.Cells(9).Value) + CDbl(DataGridView23.CurrentRow.Cells(10).Value) + CDbl(DataGridView23.CurrentRow.Cells(11).Value) + CDbl(DataGridView23.CurrentRow.Cells(12).Value) + CDbl(DataGridView23.CurrentRow.Cells(13).Value) + CDbl(DataGridView23.CurrentRow.Cells(14).Value) + CDbl(DataGridView23.CurrentRow.Cells(15).Value) + CDbl(DataGridView23.CurrentRow.Cells(16).Value) + CDbl(DataGridView23.CurrentRow.Cells(17).Value) + CDbl(DataGridView23.CurrentRow.Cells(18).Value) + CDbl(DataGridView23.CurrentRow.Cells(19).Value) + CDbl(DataGridView23.CurrentRow.Cells(20).Value) + CDbl(DataGridView23.CurrentRow.Cells(21).Value)

                    DataGridView23.CurrentRow.Cells(23).Value = total.ToString("n2")

                End If


                If Not String.IsNullOrEmpty(DataGridView23.CurrentRow.Cells(22).Value) And Not String.IsNullOrEmpty(DataGridView23.CurrentRow.Cells(21).Value) Then
                    Dim total As Double
                    total = CDbl(DataGridView23.CurrentRow.Cells(5).Value) + CDbl(DataGridView23.CurrentRow.Cells(6).Value) + CDbl(DataGridView23.CurrentRow.Cells(7).Value) + CDbl(DataGridView23.CurrentRow.Cells(8).Value) + CDbl(DataGridView23.CurrentRow.Cells(9).Value) + CDbl(DataGridView23.CurrentRow.Cells(10).Value) + CDbl(DataGridView23.CurrentRow.Cells(11).Value) + CDbl(DataGridView23.CurrentRow.Cells(12).Value) + CDbl(DataGridView23.CurrentRow.Cells(13).Value) + CDbl(DataGridView23.CurrentRow.Cells(14).Value) + CDbl(DataGridView23.CurrentRow.Cells(15).Value) + CDbl(DataGridView23.CurrentRow.Cells(16).Value) + CDbl(DataGridView23.CurrentRow.Cells(17).Value) + CDbl(DataGridView23.CurrentRow.Cells(18).Value) + CDbl(DataGridView23.CurrentRow.Cells(19).Value) + CDbl(DataGridView23.CurrentRow.Cells(20).Value) + CDbl(DataGridView23.CurrentRow.Cells(21).Value) + CDbl(DataGridView23.CurrentRow.Cells(22).Value)

                    DataGridView23.CurrentRow.Cells(23).Value = total.ToString("n2")

                End If

            End If
        End If


Es algo más largo que el ejemplo que puse al principio, porque en realidad el datagridview tenía más de dos columnas.
El código básicamente hace esto:

- Primero me cambia los puntos por comas, por que es la única forma de que sume los valores.
- Después según si las dos celdas que hay que modificar son valores null o no, sumas las celdas.
Por el momento me funciona bien, pero no sé que hacer para evitar los problemas que dan las celdas con datos null. Por ejemplo en el caso de que alguno de los valores de las celdas 5 hasta 14 fuera null, entonces ya no me funcionaría.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".