Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: anmaroso 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.
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.
-
Hola anmaroso, gracias por el aporte. Sin ver el conjunto del código y el contexto es difícil hacerse una idea. Sin embargo sí puedo señalarte un aspecto del código que llama la atención.
Estableces vmt1 = dt.Rows(fila)(1)
Luego la condición del bucle interno es Do While dt.Rows(fila)(1) = vmt1 And fila <= dt.Rows.Count - 1
vmt1 no cambia dentro del bucle, parece que permaneciera constante. Si es así, incluirlo en la condición del bucle sería innecesario y podría quedar la condición del bucle simplemente como Do While fila <= dt.Rows.Count - 1
No puedo ratificarlo porque no puedo probarlo, pero tú sí podrás hacerlo y ver si realmente es necesaria esa condición.
Saludos.