none
Progressbar en DataGridView maximum no se solucionarlo RRS feed

  • Pregunta

  • Cuando hace el for me deja el Column5.Maximum del datagridview en el de la ultima fila y ese dato me lo ejecuta en todas las filas cuando hace el for 

    Cuando lo que yo quiero hacer es que cambien el Column5.Maximum segun el dato metido en la celda3 de cada fila 

    Es decir si la fila 1 y la celda3 es = 2,  Column5.Maximum = 120 

    Sin embargo me lo deja con Column5.Maximum = 180 que seria el dato de la ultima fila celda3 

    Gracias

    For Cuenta_rowns = 0 To DataGridView1.RowCount - 1
                   Column5.Maximum = (((DataGridView1.Rows(Cuenta_rowns).Cells(2).Value * 60) + (DataGridView1.Rows(Cuenta_rowns).Cells(3).Value)) * 60)
    
    
                If (((Label8.Text * 60) + (Label7.Text)) * 60) < Column5.Maximum Then
    
    
    
                    DataGridView1.Rows(Cuenta_rowns).Cells(4).Value += 1 
    
    
    
                End If
               
            Next

    miércoles, 9 de diciembre de 2015 9:57

Respuestas

  • Vale. El problema es que el valor Maximum del progressbar se define a nivel de columna por lo que es el mismo para todas las celdas de la columna.

    Lo que puedes hacer es establecer un valor fijo, por ejemplo 100 y hacer el cálculo del progreso en porcentaje que debería mostrar en cada fila.

    Algo así:

            Dim cuenta As Integer = ((Label8.Text * 60) + (Label7.Text)) * 60
            For Each row As DataGridViewRow In DataGridView1.Rows
                Dim tiempoFila = ((row.Cells(2).Value * 60) + row.Cells(3).Value) * 60
                If tiempoFila >= cuenta Then
                    row.Cells(4).Value = CInt((tiempoFila - cuenta) * Column5.Maximum / tiempoFila)
                End If
            Next
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET miércoles, 9 de diciembre de 2015 15:57
    miércoles, 9 de diciembre de 2015 14:18
  • creo que ya , faltava los segundos de la cuenta regresiva 

    (((Label8.Text * 60) + (Label7.Text)) * 60) + Label6.Text
     Dim cuenta As Integer = (((Label8.Text * 60) + (Label7.Text)) * 60) + Label6.Text
            For Each row As DataGridViewRow In DataGridView1.Rows
                Dim tiempoFila = ((row.Cells(2).Value * 60) + row.Cells(3).Value) * 60
                If tiempoFila >= cuenta Then
    
                    row.Cells(4).Value = CInt((tiempoFila - cuenta) * Column5.Maximum / tiempoFila)
                End If
            Next

    • Marcado como respuesta JETET miércoles, 9 de diciembre de 2015 15:57
    miércoles, 9 de diciembre de 2015 15:51

Todas las respuestas

  • Pero Column5.Maximum es una variable que únicamente puede tener un valor.

    En el bucle vas recaculándolo con el valor de cada fila pero al final el valor que te va a quedar es, lógicamente, el de la última fila.

    Si quieres recuperar el valor de cada fila deberías utilizar un array o similar.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 9 de diciembre de 2015 10:08
  • Gracias por responder, entonces para que recorrar cada progressbar en el tiempo de cada celda3 de cada fila que puedo hacer 

    pordonde tengo que tirar lo tiros, llevo 2 semas con esto 

    con una fila no hay problema lo malo viene cuando pongo mas de 1 fila

    miércoles, 9 de diciembre de 2015 10:36
  • Pero el bucle que has puesto debería estar ejecutándose correctamente: únicamente incrementar el valor del progressbar en las filas en las que el tiempo indicado en la fila es mayor que el indicado en Label8 y Label7.

    Realmente no entiendo demasiado bien el problema que tienes. ¿Después de ejecutar ese código necesitas los valores de tiempos de las filas?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 9 de diciembre de 2015 10:41
  • lo que busco es que cuando la cuenta regresiva llegue o inicie desde 3 minutos quer son 180 segundos todas las filas que tenga 3 minutos o 180 segundos el progressbar se inicien y llegen al 100% al mismo tiempo que la cuenta regresiva llegue a 0

    Pero si hay alguna fila que tiene de tiempo 2minutos es decir 120 segundos se inicie tambien cuando la cuenta regresiva llegue a 2 minutos o 120 segundos 

    Y vallan tanto las que son de 180 segundos y 120 segundos las progressbar llenandose hasta llegar la cuenta gresiva a 0

    Muchisimas gracias

    miércoles, 9 de diciembre de 2015 10:49
  • Vale, ahora sí voy entendiendo lo que quieres hacer.

    ¿Y cómo defines los progressbar de cada fila?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 9 de diciembre de 2015 11:23
  • No se si te refieres a esto 

    miércoles, 9 de diciembre de 2015 12:08
  • Vale. El problema es que el valor Maximum del progressbar se define a nivel de columna por lo que es el mismo para todas las celdas de la columna.

    Lo que puedes hacer es establecer un valor fijo, por ejemplo 100 y hacer el cálculo del progreso en porcentaje que debería mostrar en cada fila.

    Algo así:

            Dim cuenta As Integer = ((Label8.Text * 60) + (Label7.Text)) * 60
            For Each row As DataGridViewRow In DataGridView1.Rows
                Dim tiempoFila = ((row.Cells(2).Value * 60) + row.Cells(3).Value) * 60
                If tiempoFila >= cuenta Then
                    row.Cells(4).Value = CInt((tiempoFila - cuenta) * Column5.Maximum / tiempoFila)
                End If
            Next
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET miércoles, 9 de diciembre de 2015 15:57
    miércoles, 9 de diciembre de 2015 14:18
  • ok, pero hay un problema

    y e puesto 3 filas una con 180 segundos, otra con 120 segundos y una tercera con 60 segundos

    entonces el problema es el siguiente 

    inicia la cuenta regresiva 3 minutos y la fila que tiene 180 segundos me marca deltiron 33% no lo que pertenece a 1 segundo

    cuando llega a la fila que contine 120 segundos me marca dicha fila 50% y la que tiene 180 segundos 66%

    y cuando llega al ultimo minuto es decir cuando la cuenta regresiva es 60 segundos todas las progressbar me marca el 100% pero la cuenta regresiva no a llegado a 0

    miércoles, 9 de diciembre de 2015 15:05
  • creo que ya , faltava los segundos de la cuenta regresiva 

    (((Label8.Text * 60) + (Label7.Text)) * 60) + Label6.Text
     Dim cuenta As Integer = (((Label8.Text * 60) + (Label7.Text)) * 60) + Label6.Text
            For Each row As DataGridViewRow In DataGridView1.Rows
                Dim tiempoFila = ((row.Cells(2).Value * 60) + row.Cells(3).Value) * 60
                If tiempoFila >= cuenta Then
    
                    row.Cells(4).Value = CInt((tiempoFila - cuenta) * Column5.Maximum / tiempoFila)
                End If
            Next

    • Marcado como respuesta JETET miércoles, 9 de diciembre de 2015 15:57
    miércoles, 9 de diciembre de 2015 15:51