1
Aprender a programar desde cero / DataTable Sumar registros de una columna con mismo campo (nombre) Visual Basic
« en: 29 de Octubre 2015, 11:49 »
Buenos días y saludos para tod@s.
Sumar los registros de una columna (Importe) que tengan el mismo valor de otra columna (nombre) y poner el valor de la suma en el último registro de mismo (nombre) en la columna (total). Lo mismo que agrupar por (nombre).
Paso el código.
dt es un DataTabla.
He estado dándole mil vueltas y no lo conseguía . Ya sé que esta forma es a la antigua usanza... muy rudimentaria pero es de la única manera que lo he logrado.
No sé si habrá alguna forma de hacerlo más práctico y con menos código. Lo he intentado con el Grouping y no me funcionó, viene casi todo con Query y yo uso Acces.
De todas formas ahí queda por si le sirve a alguien.
Gracias y saludos.
Sumar los registros de una columna (Importe) que tengan el mismo valor de otra columna (nombre) y poner el valor de la suma en el último registro de mismo (nombre) en la columna (total). Lo mismo que agrupar por (nombre).
Paso el código.
Código: [Seleccionar]
da.Fill(dt)
ds.Tables.Add(dt)
Dim vmi1 As Integer
Dim vmt1 As String
Dim vmt2 As String
Dim vms1 As Single
Dim vms2 As Single
Dim fila As Integer = 0
While fila <= dt.Rows.Count - 1
vmt1 = dt.Rows(fila)(1)
vms1 = 0.0
vmt2 = ""
Do While dt.Rows(fila)(1) = vmt1 And fila <= dt.Rows.Count - 1
vms1 = vms1 + dt.Rows(fila)(2)
If vmt2 = "" Then
vmt2 = dt.Rows(fila)(6)
Else
vmt2 = vmt2 & "," & dt.Rows(fila)(6)
End If
dt.Rows(fila)(8) = dt.Rows(fila)(0)
If fila = dt.Rows.Count - 1 Then
dt.Rows(fila)(3) = vms1
dt.Rows(fila)(7) = vmt2
vms2 = vms2 + vms1
Exit While
Else
If fila < dt.Rows.Count - 1 Then
fila = fila + 1
End If
End If
Loop
If fila < dt.Rows.Count - 1 Then
fila = fila - 1
dt.Rows(fila)(3) = vms1
dt.Rows(fila)(7) = vmt2
vms2 = vms2 + vms1
fila = fila + 1
End If
End While
dt es un DataTabla.
He estado dándole mil vueltas y no lo conseguía . Ya sé que esta forma es a la antigua usanza... muy rudimentaria pero es de la única manera que lo he logrado.
No sé si habrá alguna forma de hacerlo más práctico y con menos código. Lo he intentado con el Grouping y no me funcionó, viene casi todo con Query y yo uso Acces.
De todas formas ahí queda por si le sirve a alguien.
Gracias y saludos.