Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: anmaroso en 29 de Octubre 2015, 11:49

Título: DataTable Sumar registros de una columna con mismo campo (nombre) Visual Basic
Publicado 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.

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.
Título: Re:DataTable Sumar registros de una columna con mismo campo (nombre) Visual Basic
Publicado por: Alex Rodríguez en 10 de Diciembre 2015, 08:19
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.