none
Como sumar columnas de filas seleccionadas por un checkbox en un datagridview RRS feed

  • Pregunta

  • Buenas,

    Tengo un datagridview que tiene los siguientes campos:

    Seleccion (DataGridViewCheckBoxColumn)

    Total (DataGridViewTextBoxColumn)

    y en el formulario tengo un TextBox

    Como le hago para que a cada fila que le pulse el Checkbox, automaticamente se sume su columna total y se presente en el TextBox que tengo en el formulario. ejemplo:

    Si tengo 3 filas

    Seleccion              Total

    seleccionada         5000

    seleccionada         10000

                               2000

    seleccionada         3000

    TextBox1.Text=18000

    ya que solo seleccione 5000+10000+3000


    samuel


    martes, 14 de mayo de 2019 19:27

Respuestas

  • Bueno,

    ya solucione lo del error cambiando el tipo de dato de int a decimal para manejar los decimales, pero sucede algo no comun: cuando hago la primer seleccion la suma se queda en 0 y cuando selecciono otro es que inicia y entonces provoca que haya un desbalance por que si el monto es 20,000 cuando inicie a seleccionar sera 0 y cuando seleccione otro mas sera igual a 20,000 cuando deberia ser 40,000


    samuel

    decimal suma = dtgv.Rows.Cast<DataGridViewRow>().Where(r => Convert.ToBoolean(r.Cells["Seleccion"].Value))
                                   .Sum(r => Convert.ToDecimal(r.Cells["Total"].Value));
                txtmontoapagar.Text = suma.ToString();

    martes, 14 de mayo de 2019 20:26

Todas las respuestas

  • hola

    si aplicas linq es simple

    int suma = DataGridView1.Rows.Cast<DataGridViewRow>()
                                  .Where(r=> Convert.ToBoolean(r.Cells["Seleccion"].Value))
                                  .Sum(r=> Convert.ToInt32(r.Cells["Total"].Value));
                                            

    aplicas un filtro para tomar las seleccionadas y luego sumas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Samuel Ignacio martes, 14 de mayo de 2019 19:59
    • Desmarcado como respuesta Samuel Ignacio martes, 14 de mayo de 2019 20:08
    martes, 14 de mayo de 2019 19:52
  • Buenas leandro,

    2 preguntas

    1: que representa r? osea la delimitas y la utilizas para el casteo de las columnas, pero no veo donde la declaras, osea me funciona tu codigo, solo es por saber.

    2: el codigo lo deberia aplicar en el cellclick del datagridview?


    samuel

    martes, 14 de mayo de 2019 19:59
  • AUNQUE ahora que lo uso en cellclick del datagridview no me funciona, me dice: input string no esta en el formato correcto osea selecciono una primera fila y va bien, pero selecciono mas de una y me da ese error

    samuel

    martes, 14 de mayo de 2019 20:08
  • Bueno,

    ya solucione lo del error cambiando el tipo de dato de int a decimal para manejar los decimales, pero sucede algo no comun: cuando hago la primer seleccion la suma se queda en 0 y cuando selecciono otro es que inicia y entonces provoca que haya un desbalance por que si el monto es 20,000 cuando inicie a seleccionar sera 0 y cuando seleccione otro mas sera igual a 20,000 cuando deberia ser 40,000


    samuel

    decimal suma = dtgv.Rows.Cast<DataGridViewRow>().Where(r => Convert.ToBoolean(r.Cells["Seleccion"].Value))
                                   .Sum(r => Convert.ToDecimal(r.Cells["Total"].Value));
                txtmontoapagar.Text = suma.ToString();

    martes, 14 de mayo de 2019 20:26
  • mira el comportamiento hice un video corto:

    https://youtu.be/-ehSqYC90tQ


    samuel

    martes, 14 de mayo de 2019 20:51
  • hola

    >>que representa r?

    es un lambda

    Expresiones lambda (Guía de programación de C#)

    >>el codigo lo deberia aplicar en el cellclick del datagridview?

    ehh no se, quizas seria mejor cuando detectas que se sale de la edicion de la celda


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta eRiver1 martes, 14 de mayo de 2019 21:20
    martes, 14 de mayo de 2019 21:12
  • hola

    >>cuando hago la primer seleccion la suma se queda en 0 y cuando selecciono otro es que inicia

    estose produce por como se ejecuta el evento y cuando esta aplicado el cambio en la seleccion

    por eso mencione que deberias usar el CellEndEdit

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta eRiver1 martes, 14 de mayo de 2019 21:19
    martes, 14 de mayo de 2019 21:14