Autor Tema: DataTable Sumar registros de una columna con mismo campo (nombre) Visual Basic  (Leído 7557 veces)

anmaroso

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 29
    • Ver Perfil
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.
« Última modificación: 10 de Diciembre 2015, 08:09 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".