none
Style.BackColor en evento LOAD no me pinta nada RRS feed

  • Pregunta

  • Buenas . En mi evento load tengo este Sub que realiza el pintado de las campos que tienen X pero no me pinta nada hasta darle listar y ahi recien se me activa ... que estoy haciendo mal

        Sub PINTAR()
            For Rows As Integer = 0 To DgvMes1.RowCount - 1
                For Columnas As Integer = 0 To DgvMes1.ColumnCount - 1
                    If DgvMes1.Item(Columnas, Rows).Value().ToString = "X" Then
                        DgvMes1.Item(Columnas, Rows).Style.BackColor = Color.ForestGreen
                    End If
                Next
            Next

            For Rows As Integer = 0 To DgvMes2.RowCount - 1
                For Columnas As Integer = 0 To DgvMes2.ColumnCount - 1
                    If DgvMes2.Item(Columnas, Rows).Value().ToString = "X" Then
                        DgvMes2.Item(Columnas, Rows).Style.BackColor = Color.ForestGreen
                    End If
                Next
            Next
        End Sub


    Pasa los puntos prro v:

    miércoles, 23 de agosto de 2017 20:26

Respuestas

Todas las respuestas

  • Supongo que es porque aún no está creado el DGV, prueba colocar el mismo código una vez termine la carga en el evento que sea, ej luego de DgvMes1.DataSource = (.....)

    • Editado Marcelo PF miércoles, 23 de agosto de 2017 21:05
    miércoles, 23 de agosto de 2017 21:04
  • Hola:

     Podrías probar ese código en el evento Shown del formulario:

    Form.Shown Event 

     Que ocurre cuando el formulario es desplegado por primera vez...

     


    Saludos desde Monterrey, Nuevo León, México!!!

    miércoles, 23 de agosto de 2017 21:14
  • Si aqui si me funciona ? sera por que no libero el dgv creado? y si uso  dgv.dispose?


    Pasa los puntos prro v:

    miércoles, 23 de agosto de 2017 21:17
  • Hola:

     Pero entonces si te funciona o no?, ya no entendí.

     De entrada en el LOAD dudo que funciones puesto que el formulario apenas se esta cargando los controles aun no estas inicializados...

     De echo, deberías de buscar un evento del mismo DataGridView para poder aplicar el formato, por ejemplo:

    DataGridView.RowsAdded Event 

     Que se dispara cuando un nuevo Row es creado, pero si usas este evento entonces tendrías que cambiar tu código, otra cosa que no mencionas es si los datos están ligado a una fuente de datos, osea si usas la propiedad DataSource del control, por que de ser así, entonces deberás de usar el evento:

     DataGridView.DataBindingComplete Event 

     Que se dispara cada vez que las propiedades DataSource, DataMember o BindingContext cambian, yo probaría con este ultimo.

     Espero te sea de utilidad.

     


    Saludos desde Monterrey, Nuevo León, México!!!

    miércoles, 23 de agosto de 2017 21:36
  • Fe de ratas

    el evento Shown  me funciona perfectamente , me di cuenta que no me cargaba mi segundo Tab Mes2 y realize esto

      Private Sub frm_PlantillaMensual_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
            ActualizarTotalesLocal()
        End Sub

        Private Sub TabControl1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabControl1.Click
            ActualizarTotalesLocal()
        End Sub

    Pero se da la sensacion que demora mucho ... al cargar Julio

    http://recordit.co/xmG7dKlB7m


    Pasa los puntos prro v:



    miércoles, 23 de agosto de 2017 22:10
  • Solo para confirmar luego de echa la carga del DataGrieview

        Dgv.DataSource = Tabla 'DataTable en este caso
    
            For Each row As DataGridViewRow In Dgv.Rows
                For i As Integer = 0 To Dgv.Columns.Count - 1
                    If Convert.ToString(row.Cells(i).Value) = "X" Then
                        row.Cells(i).Style.BackColor = Color.ForestGreen
                    End If
                Next
            Next

    Tiene un delay al pintar si

    Saludos

    miércoles, 23 de agosto de 2017 22:29
  • Si tengo un delay como puedo mejorarlo este es mi codigo

        Sub ActualizarTotalesLocal()
            Dim c1, c2, x1, x2 As Integer
            c1 = 0 : c2 = 0
            x1 = 0 : x2 = 0
            For r As Integer = 0 To DgvMes1.RowCount - 1
                For c As Integer = 0 To DgvMes1.ColumnCount - 1
                    If DgvMes1.Item(c, r).Value().ToString = "X" Then
                        DgvMes1.Rows(r).Cells(c).Style.BackColor = Color.ForestGreen
                        c1 = c1 + 1
                        'ElseIf DgvMes1.Item(Columnas, Rows).Value().ToString = "1" Then
                        '    x1 = x1 + 1
                    End If
                Next

                DgvTotales.Rows(r).Cells(0).Value = c1 : c1 = 0
                ' DgvMes1.Rows(Rows).Cells(33).Value = c1 : DgvTotales.Rows(Rows).Cells(0).Value = c1 : c1 = 0
                ' DgvMes1.Rows(Rows).Cells(34).Value = x1 : x1 = 0
            Next


            For r As Integer = 0 To DgvMes2.RowCount - 1
                For c As Integer = 0 To DgvMes2.ColumnCount - 1
                    If DgvMes2.Item(c, r).Value().ToString = "X" Then
                        DgvMes2.Rows(r).Cells(c).Style.BackColor = Color.ForestGreen
                        c2 = c2 + 1
                        'ElseIf DgvMes2.Item(Columnas, Rows).Value().ToString = "1" Then
                        '    x2 = x2 + 1
                    End If

                Next

                DgvTotales.Rows(r).Cells(1).Value = c2 : c2 = 0
                'DgvMes2.Rows(Rows).Cells(33).Value = c2 : DgvTotales.Rows(Rows).Cells(1).Value = c2 : c2 = 0 'CANTIDAD X
                'DgvMes2.Rows(Rows).Cells(34).Value = x2 : x2 = 0 'CANTIDAD DE 1

            Next

            For Rows As Integer = 0 To DgvTotales.RowCount - 1
                For Columnas As Integer = 0 To DgvTotales.ColumnCount - 1

                    DgvTotales.Item(2, Rows).Value = DgvTotales.Item(0, Rows).Value() + DgvTotales.Item(1, Rows).Value()
                Next
            Next
            DgvMes1.ClearSelection() : DgvMes2.ClearSelection()
        End Sub


    Pasa los puntos prro v:

    miércoles, 23 de agosto de 2017 22:36
  • Tienes que pintar si o si los rows? sino con el mismo código pinta el carácter    (...) ForeColor = (...) es mucho más libiano

    miércoles, 23 de agosto de 2017 23:09
  • Se que es mas liviano pero es un requerimiento pero funciona perfectamente lo dejare para mas tarde , gracias.

    Pasa los puntos prro v:

    miércoles, 23 de agosto de 2017 23:14