none
como sumar varias fila en un datagridview

    Pregunta

  • deseo sumar desde el rango desde 2 DateTimePicker, las filas van a contener una fecha y monto , osea DESDE-HASTA y las filas que esten dentro de ese rango segun las fechas me sumen cada monto, como un monto total
    miércoles, 8 de marzo de 2017 11:44

Respuestas

  • german634,

    Existen tipos adecuados para almacenar valores de fecha como por ejemplo: date, datetime, datetime2, etc. El lío de tener una cadena conteniendo una representación de fecha es que el formato con el que ha sido escrito no es predecible a fines de recuperar el valor real de fecha (en binario), ¿bajo que formato está escrito? ¿basado en la cultura regional? ¿basado en un estilo propio?. Para el ejemplo vamos a suponer que no habrá problemas en una "conversión ordinaria", caso contrario habrá que echar mano del método DateTime.TryParseExact

    'Obtener la referencia del origen de datos
    Dim dt As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
    
    'Recuperar la sumatoria de la columna [monto] según condiciones
    Dim TotalMonto As Decimal = dt.Rows.Cast(Of DataRow).
    	Where(Function(c) Convert.ToDateTime(c.Field(Of String)("fecha")) >= dtpFec1.Value AndAlso
    		Convert.ToDateTime(c.Field(Of String)("fecha")) <= dtpFec2.Value).
    	Sum(Function(c) c.Field(Of Decimal)("monto"))
    
    txtTotalMonto.Text = TotalMonto.ToString("N2")

    No olvides indicar el espacio de nombres: Imports System.Linq


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 8 de marzo de 2017 19:27

Todas las respuestas

  • Perdón pero creo que no te entiendo muy bien tu duda. ¿Quieres obtener el numero de días de dos fechas que se obtienen en dos datepicker? ¿Tienes muchos datepicker (asociados en desde-hasta) y quieres sacar un total de días?... no se, no termino de entenderte.

    ¿Puedes poner una explicación mejor o código?

    miércoles, 8 de marzo de 2017 12:18
  • explico mejor, tengo una tabla por ejemplo llamada factura, la cual contiene 3 columna: nombre_productor, Fecha, Monto.

    lo que quiero es  segun el rango entre dos DateTimePicker osea la fecha. me sume el monto de esos registros o filas segun el rango que coloque en ese DateTimePicker.. ejemplo

    DateTimePicker1 "01/01/2017"

    DateTimePicker2"01/02/2017"

    en esos dos DateTimePicker seleccione las fecha que va a buscar DESDE HASTA, la cual quiero que todas las fechas de ese registro que este en ese rango me sume.

    espero me haya explicado mejor

    miércoles, 8 de marzo de 2017 17:39
  • german634,

    ¿Los datos del objeto de tipo DataGridView están vinculados a un origen a través de la propiedad DataSource?

    ¿Qué tipo de dato tiene la columna [fecha]? ¿date? ¿datetime? ¿string?, de tener el tipo string (que no es lo recomendado), ¿qué formato tiene? ¿'dd//MM/yyyy', 'yyyy-MM-dd', '...'?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 8 de marzo de 2017 18:09
  • el DataGridView esta conectado mediante este codigo:

    Dim cn = New SqlConnection("Data Source=SQLEXPRESS;Initial Catalog=prueba;Persist Security Info=True;User ID=prueba;Password=12345")
            Dim da As New SqlDataAdapter("Select  fecha, monto from registro_producto", cn)
            Dim ds As New DataSet
    
            da.Fill(dss)
            dv.Table = ds.Tables(0)
    
            DataGridView3.DataSource = dv
    
            DataGridView3.Columns(0).HeaderText = "Fecha"
            DataGridView3.Columns(1).HeaderText = "Monto"

    la columna fecha es del tipo de datos "varchar" y la columna monto "numeric"

    miércoles, 8 de marzo de 2017 18:43
  • german634,

    Existen tipos adecuados para almacenar valores de fecha como por ejemplo: date, datetime, datetime2, etc. El lío de tener una cadena conteniendo una representación de fecha es que el formato con el que ha sido escrito no es predecible a fines de recuperar el valor real de fecha (en binario), ¿bajo que formato está escrito? ¿basado en la cultura regional? ¿basado en un estilo propio?. Para el ejemplo vamos a suponer que no habrá problemas en una "conversión ordinaria", caso contrario habrá que echar mano del método DateTime.TryParseExact

    'Obtener la referencia del origen de datos
    Dim dt As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
    
    'Recuperar la sumatoria de la columna [monto] según condiciones
    Dim TotalMonto As Decimal = dt.Rows.Cast(Of DataRow).
    	Where(Function(c) Convert.ToDateTime(c.Field(Of String)("fecha")) >= dtpFec1.Value AndAlso
    		Convert.ToDateTime(c.Field(Of String)("fecha")) <= dtpFec2.Value).
    	Sum(Function(c) c.Field(Of Decimal)("monto"))
    
    txtTotalMonto.Text = TotalMonto.ToString("N2")

    No olvides indicar el espacio de nombres: Imports System.Linq


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 8 de marzo de 2017 19:27