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.