Visual Basic.NET - Como calcular min de una columna segun grupo

 
Vista:
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como calcular min de una columna segun grupo

Publicado por Miguel (15 intervenciones) el 29/04/2020 02:34:50
Estimados,
Previos saludos, tengo la siguiente duda:

DatagridView3

C0 ! C1
aa ! 0.2
aa ! 1
bb ! 4
bb ! -1

DatagridView1

C0 ! C1 !
aa ! Resultado MIn=0.2
bb ! Resultad0 Min = -1


Estoy haciendo lo siguiente, sin embargo no me entrega el resultado esperado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dim IDi As String
For DGV1 As Integer = 0 To DataGridView1.Rows.Count - 1
    IDi = DataGridView1.Item(0, DGV1).Value
    For DGV3 As Integer = 0 To DataGridView3.Rows.Count - 1
        If DataGridView3.Item(0, DGV3).Value = IDi Then
 
            Dim valorMaximo As Double = 0
            Dim valorMinimo As Double = Double.MaxValue
            For Each row As DataGridViewRow In DataGridView3.Rows
                If Not row.IsNewRow Then
                    If row.Cells(0).Value > valorMaximo Then
                        valorMaximo = row.Cells(0).Value
                    End If
                    If row.Cells(0).Value < valorMinimo Then
                        valorMinimo = row.Cells(0).Value
                    End If
                End If
            Next
            If DataGridView3.Item(1, DGV3).Value = valorMinimo Then
                DataGridView1.Item(1, DGV1).Value = DataGridView3.Item(1, DGV3).Value
            Else
            End If
 
        Else
        End If
    Next
Next

De ante mano muchas gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como calcular min de una columna segun grupo

Publicado por Phil Rob (1554 intervenciones) el 29/04/2020 10:58:01
Hola Miguel,

He hecho mi pequeño trabajo del día ...

He trabajado todavía en el programa anterior, he hecho los cálculos con el DGV1 y puesto los resultados en DGV3.
Calculo Min y Max, borras la linea que no te gusta.
A ti de convertir....

Que tenga un buen día
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    Dim S As String
    Dim SPrecedente As String = ""
    Dim ValMin As Double
    Dim ValMax As Double
 
    ' **********
    ' Debemos ordenar el DVG con la coluna C0   ' !!! No necesario si es permide de cambiar DataGridView1
    ' Para no modificar DataGrdiView1, hacemos un duplica que volvemos cuando esta labor terminada
    Dim DGVTmp As New DataGridView()
    For C As Integer = 0 To DataGridView1.Columns.Count - 1
        DGVTmp.Columns.Add(DataGridView1.Columns(C).Clone)
    Next
    For R As Integer = 0 To DataGridView1.Rows.Count - 2 ' escribir -1 si  no ultima linea vacia en el DataGridView1
        DGVTmp.Rows.Add()
    Next
    For R As Integer = 0 To DataGridView1.Rows.Count - 2 ' escribir -1 si  no ultima linea vacia en el DataGridView1
        For C As Integer = 0 To DataGridView1.Columns.Count - 1
            DGVTmp.Item(C, R).Value = DataGridView1.Item(C, R).Value
        Next
    Next
    ' **********
 
    DataGridView1.Sort(DataGridView1.Columns("C0"), System.ComponentModel.ListSortDirection.Ascending)
 
    If DataGridView3.Rows.Count > 1 Then   ' escribir 0 si no ultima linea vacia en el DataGridView3
        DataGridView3.Rows.Clear()
    End If
 
' Aqui, este es el algoritmo para encontrar los Min y Max
    For R1 As Integer = 0 To DataGridView1.Rows.Count - 2  ' escribir -1 si  no ultima linea vacia en el DataGridView1
        S = DataGridView1.Item("C0", R1).Value
        If S = SPrecedente Then
            Continue For
        End If
        ValMin = DataGridView1.Item("C2", R1).Value
        ValMax = DataGridView1.Item("C2", R1).Value
        For R2 As Integer = R1 + 1 To DataGridView1.Rows.Count - 2  ' escribir -1 si  no ultima linea vacia en el DataGridView1
            If S = DataGridView1.Item("C0", R2).Value Then
                If ValMin > DataGridView1.Item("C2", R2).Value Then
                    ValMin = DataGridView1.Item("C2", R2).Value
                ElseIf ValMax < DataGridView1.Item("C2", R2).Value Then
                    ValMax = DataGridView1.Item("C2", R2).Value
                End If
            End If
        Next
        DataGridView3.Rows.Add(S, "Min", ValMin)   ' Aqui, registramos Min
        DataGridView3.Rows.Add(S, "Max", ValMax)  ' Aqui, registramos Max
        SPrecedente = S
    Next
 
    ' **********
    ' Debemos volver los datos iniciales de DataGridView1    ' !!! No necesario si DataGridView1 no registro precedamente
    For R As Integer = 0 To DataGridView1.Rows.Count - 2 ' escribir -1 si  no ultima linea vacia en el DataGridView1
        For C As Integer = 0 To DataGridView1.Columns.Count - 1
            DataGridView1.Item(C, R).Value = DGVTmp.Item(C, R).Value
        Next
    Next
    DGVTmp.Dispose()
    ' **********
 
End Sub

DGVJuan2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como calcular min de una columna segun grupo

Publicado por Miguel (15 intervenciones) el 29/04/2020 17:54:05
Estimado Profesor, ya se ha vuelto una grata costumbre agradecer por su ayuda.

Gracias nuevamente por ayudarme en este proceso de aprendizaje.

Que tenga un maravilloso día
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como calcular min de una columna segun grupo

Publicado por Miguel (15 intervenciones) el 30/04/2020 00:54:47
Estimado Profesor,
He tratado de asignar los min y max a una lista fija y no he podido.

DatagridView1
C0 ! C1
aa ! 0.2
aa ! 1
bb ! 4
bb ! -1

DatagridView3
C0 ! C1 ! C2
aa ! Resultado MIn=0.2 ! Resultado MIn=1
bb ! Resultad0 Min = -1 ! Resultado MIn=4

El problema se me genera cuando trato de dejar fijos los valores de C0 de la DatagridView3 (osea que aa y bb ya formen parte de la C0) y solo agregue los valores de la C1.y C2

De ante mano muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como calcular min de una columna segun grupo

Publicado por Miguel (15 intervenciones) el 30/04/2020 17:07:53
Muchas gracias Profesor.

Que tenga un maravilloso día
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar