none
Como Sumar Una Columna de un DataGridView?? RRS feed

  • Pregunta

  • así es amigos, en esa fila que quiero sumar muestro horas que guardo en un campo llamado HORAS_TRABAJADAS y se van guardando de esta forma:

    HORAS_TRABAJADAS

    00:56:45

    00:09:49

    01:10:30

    y quiero que se me muestra la sumatoria en un textbox que seria:

    02:17:04  dos horas con 17 minutos y cuatro segundos

    como puedo lograr esto??

    espero me puedan ayudar, gracias y saludos.

    domingo, 10 de mayo de 2015 4:21

Respuestas

  • Hola cronoss podrías emplear el siguiente código, donde se carga datos al datagridview a través de un datatable:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable tbl = new DataTable();
                tbl.Columns.Add("Tiempo",typeof(System.TimeSpan));
    
                DataRow dr1;
                dr1 = tbl.NewRow();
                dr1["Tiempo"] = "00:56:45";
                tbl.Rows.Add(dr1);
    
                DataRow dr2;
                dr2 = tbl.NewRow();
                dr2["Tiempo"] = "00:09:49";
                tbl.Rows.Add(dr2);
    
                dataGridView1.DataSource = tbl;
                textBox1.Text = tbl.Compute("Sum(Tiempo)", "").ToString();
            }
        }
    }
    

    Espero haberte ayudado.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 4:43
  • Hola cronoss depende de que tipo de dato sea tu columna en sql, si es de tipo char o varchar tendrias que recorrer las filas de tu datatable o de tu datagridview para poder convertir los datos de esa columna y recien operarlos, si la columna tiene un tipo de dato operable solo lo almacenarias en una variable tipo datatable y realizarias el Compute:

    textBox1.Text = tbl.Compute("Sum(MiColumna)", "").ToString();

    Espero haberte ayudado.

    Saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 7:18
  •         Dim t1 As TimeSpan = TimeSpan.Parse(TextBox1.Text)
            Dim t2 As TimeSpan = TimeSpan.Parse(TextBox2.Text)
            TextBox3.Text = (t1 + t2).ToString("hh:mm:ss")

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 18:44
  • Qué texto tienes en el TextBox?
    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 19:23
  • Hola cronoss al momento de realizar el calculo, debo de decirte que si el ingreso de horas de los textbox si se ejecutan cuando se dan click a un button no deberia de mostrate ningun error siempre y cuando los datos ingresados sean correctos.

    Si lo que estas haciendo que se calculen mientras estas digitando o ingresando los datos a las cajas de texto es obvio que tiene que mostrarte un error, si es que lo estas haciendo te recomendaría usar try catch solo de momento nada mas.

    Pero mi sugerencia es que se calculen cuando se de click a un button.

        try 
        {
            //Todo el codigo que usas para calcular deberias ponerlo aqui
        }
        catch
        {
        }

    Espero haberte ayudado.

    Saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 20:23
  • hola Aldair Cosetito Coral gracias por la ayuda, pero el campo ya esta guardado en una base de datos y solo los muestro en un datagridview.

    en este caso como le podría hacer para que se sume este campo?

    tendría que implementarle un ciclo?

    saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 7:06
  • hola Aldair Cosetito Coral muchas gracias por la respuestas, me sirvieron de mucho, te lo agradezco mucho.

    y aprovechando, tengo otra pregunta, en otra aplicación que estoy haciendo pero no en c# sino en visual basic igual en visual studio 2013, lo que quiero lograr es la sumatoria de dos textbox donde me guardan la hora, por ejemplo:

    textbox1.text= 00:45:23

    y en el textbox2 es donde lo muestro que seria textbox2.text= textbox1.text + textbox2.text pero obviamente como en textbox2 no tengo nada apenas empezaría a sumar pues el resultado quedaría así:

    textbox2.text= 00:45:23

    hace tiempo ya avía trabajado con algo parecido pero en visual basic 6.0 y lo hacia de esta forma

    Dim suma2,suma3 As Variant

    suma2 = Format(Text3, "hh:mm:ss")
    suma3 = Format(Text5, "hh:mm:ss")
    Text5 = Format(TimeValue(suma2) + (TimeValue(suma3)), "hh:mm:ss")

    es decir primero dava formato de horas a los textbox y después hacia la sumatoria con variables, quise hacerlo igual en STUDIO pero me marca error

    como le podría hacer para lograr esto?? gracias, saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 17:36
  • Hola amigo Asier Villanueva gracias por tu respuesta pero al correr el sistema me manda un herror

    Dim t1 As TimeSpan = TimeSpan.Parse(TextBox1.Text) no se reconoce la cadena como un valor de Time Span valido

    porque me saldra este error??

    saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 19:20
  • veras, en el texto de mis textbox en propiedades no puse nada, cuando corro el sistema es cuando se van pasando la captura de las horas en el textbox3 y  en el textbox5 es donde se muestra la suma

    es decir textbox5 al correr el programa esta en limpio

    y textbox3 esta con la captura de la hora por ejemplo 00:56:08

    entonces al sumarlos como textbox esta en ceros deberia quedar asi

    Dim h1 As TimeSpan = TimeSpan.Parse(TextBox5.Text)
    Dim h2 As TimeSpan = TimeSpan.Parse(TextBox3.Text)
    TextBox5.Text = (h1 + h2).ToString("hh:mm:ss")

    y en el textbox5 me deberia mostrar 00:56:08

    espero haber explicado bien


    • Editado cronoss domingo, 10 de mayo de 2015 20:04
    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 19:59

Todas las respuestas

  • Hola cronoss podrías emplear el siguiente código, donde se carga datos al datagridview a través de un datatable:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable tbl = new DataTable();
                tbl.Columns.Add("Tiempo",typeof(System.TimeSpan));
    
                DataRow dr1;
                dr1 = tbl.NewRow();
                dr1["Tiempo"] = "00:56:45";
                tbl.Rows.Add(dr1);
    
                DataRow dr2;
                dr2 = tbl.NewRow();
                dr2["Tiempo"] = "00:09:49";
                tbl.Rows.Add(dr2);
    
                dataGridView1.DataSource = tbl;
                textBox1.Text = tbl.Compute("Sum(Tiempo)", "").ToString();
            }
        }
    }
    

    Espero haberte ayudado.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 4:43
  • hola Aldair Cosetito Coral gracias por la ayuda, pero el campo ya esta guardado en una base de datos y solo los muestro en un datagridview.

    en este caso como le podría hacer para que se sume este campo?

    tendría que implementarle un ciclo?

    saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 7:06
  • Hola cronoss depende de que tipo de dato sea tu columna en sql, si es de tipo char o varchar tendrias que recorrer las filas de tu datatable o de tu datagridview para poder convertir los datos de esa columna y recien operarlos, si la columna tiene un tipo de dato operable solo lo almacenarias en una variable tipo datatable y realizarias el Compute:

    textBox1.Text = tbl.Compute("Sum(MiColumna)", "").ToString();

    Espero haberte ayudado.

    Saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 7:18
  • hola Aldair Cosetito Coral muchas gracias por la respuestas, me sirvieron de mucho, te lo agradezco mucho.

    y aprovechando, tengo otra pregunta, en otra aplicación que estoy haciendo pero no en c# sino en visual basic igual en visual studio 2013, lo que quiero lograr es la sumatoria de dos textbox donde me guardan la hora, por ejemplo:

    textbox1.text= 00:45:23

    y en el textbox2 es donde lo muestro que seria textbox2.text= textbox1.text + textbox2.text pero obviamente como en textbox2 no tengo nada apenas empezaría a sumar pues el resultado quedaría así:

    textbox2.text= 00:45:23

    hace tiempo ya avía trabajado con algo parecido pero en visual basic 6.0 y lo hacia de esta forma

    Dim suma2,suma3 As Variant

    suma2 = Format(Text3, "hh:mm:ss")
    suma3 = Format(Text5, "hh:mm:ss")
    Text5 = Format(TimeValue(suma2) + (TimeValue(suma3)), "hh:mm:ss")

    es decir primero dava formato de horas a los textbox y después hacia la sumatoria con variables, quise hacerlo igual en STUDIO pero me marca error

    como le podría hacer para lograr esto?? gracias, saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 17:36
  •         Dim t1 As TimeSpan = TimeSpan.Parse(TextBox1.Text)
            Dim t2 As TimeSpan = TimeSpan.Parse(TextBox2.Text)
            TextBox3.Text = (t1 + t2).ToString("hh:mm:ss")

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 18:44
  • Hola amigo Asier Villanueva gracias por tu respuesta pero al correr el sistema me manda un herror

    Dim t1 As TimeSpan = TimeSpan.Parse(TextBox1.Text) no se reconoce la cadena como un valor de Time Span valido

    porque me saldra este error??

    saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 19:20
  • Qué texto tienes en el TextBox?
    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 19:23
  • veras, en el texto de mis textbox en propiedades no puse nada, cuando corro el sistema es cuando se van pasando la captura de las horas en el textbox3 y  en el textbox5 es donde se muestra la suma

    es decir textbox5 al correr el programa esta en limpio

    y textbox3 esta con la captura de la hora por ejemplo 00:56:08

    entonces al sumarlos como textbox esta en ceros deberia quedar asi

    Dim h1 As TimeSpan = TimeSpan.Parse(TextBox5.Text)
    Dim h2 As TimeSpan = TimeSpan.Parse(TextBox3.Text)
    TextBox5.Text = (h1 + h2).ToString("hh:mm:ss")

    y en el textbox5 me deberia mostrar 00:56:08

    espero haber explicado bien


    • Editado cronoss domingo, 10 de mayo de 2015 20:04
    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 19:59
  • Hola cronoss al momento de realizar el calculo, debo de decirte que si el ingreso de horas de los textbox si se ejecutan cuando se dan click a un button no deberia de mostrate ningun error siempre y cuando los datos ingresados sean correctos.

    Si lo que estas haciendo que se calculen mientras estas digitando o ingresando los datos a las cajas de texto es obvio que tiene que mostrarte un error, si es que lo estas haciendo te recomendaría usar try catch solo de momento nada mas.

    Pero mi sugerencia es que se calculen cuando se de click a un button.

        try 
        {
            //Todo el codigo que usas para calcular deberias ponerlo aqui
        }
        catch
        {
        }

    Espero haberte ayudado.

    Saludos.

    • Marcado como respuesta cronoss domingo, 10 de mayo de 2015 21:35
    domingo, 10 de mayo de 2015 20:23
  • muchas gracias por sus respuestas amigos Aldair Cosetito Coral y Asier Villanueva me sirvieron de mucho, se los agradezco mucho. saludos.
    domingo, 10 de mayo de 2015 21:37