none
Pintar datagridview

    Pregunta

  • Hola, quiero que al cumplirse la condición me pinte la fila, este es el código que tengo.

    No me las pinta.

      For Each fila As DataGridViewRow In DataGridView1.Rows
                        If fila.Cells("CantidadStock").Value = "0" Then
                            fila.Cells("CantidadStock").Style.BackColor = Color.Red
                        End If
                    Next

    Saludos.


    jueves, 8 de diciembre de 2016 16:55

Respuestas

  • Hola, 

    Pdrías utilizar el código que tienes en el evento CellFormatting, dentro del evento colocarías esto:

    If Convert.ToInt32(DataGridView1("CantidadStock", e.RowIndex).Value) = 0 Then
    DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor= Color.Red
    End If


    Antonio Mata

    • Propuesto como respuesta Willams Morales jueves, 8 de diciembre de 2016 17:34
    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 16:58
  • EstebanQuito125478,

    El evento CellFormatting se produce cada vez que se pinta (escribe) cada celda, por tanto es irrelevante como y cuando cargues los datos, siempre que la celda se pinte se producirá el evento, por consecuencia se realizará la validación del valor y la asignación del formato según corresponda:

    Private Sub dataGridView1_CellFormatting(sender As Object, ...
    	Dim dgv As DataGridView = DirectCast(sender, DataGridView)
    
    	If dgv.Columns(e.ColumnIndex).Name = "CantidadStock" Then
    		If e.Value IsNot Nothing Then
    			e.CellStyle.BackColor = If(CInt(e.Value) > 0, Color.Green, Color.Red)
    		End If
    	End If
    End Sub



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 17:33
  • Hola prueba con:

    DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Red;
    
     

    El cero indica es el indice de la columna que quieres pintar, igualmente lo debes hacer en el evento cellFormating

    Saludos


    Javier

    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 20:06
  • Con el codigo que me dieron se "pinta" la celda.

    Yo quería saber como pintar la columna.

    Saludos

    Entones basta con esto:

    DataGridView1.Columns(e.RowIndex).DefaultCellStyle.BackColor= Color.Red


    Antonio Mata

    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 20:06

Todas las respuestas

  • Hola, 

    Pdrías utilizar el código que tienes en el evento CellFormatting, dentro del evento colocarías esto:

    If Convert.ToInt32(DataGridView1("CantidadStock", e.RowIndex).Value) = 0 Then
    DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor= Color.Red
    End If


    Antonio Mata

    • Propuesto como respuesta Willams Morales jueves, 8 de diciembre de 2016 17:34
    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 16:58
  • Pero lo necesito utilizar cuando cargo los valores en un datagrid con una función que se llama "cargardatagrid"
    jueves, 8 de diciembre de 2016 17:01
  • Hola EstebanQuito125478

    Y cúal es tu problema? xq con ese código debería hacer lo mencionado.

    Saludos

     

    Javier

    jueves, 8 de diciembre de 2016 17:04
  • Cómo dice el compañero, debes utilizar el evento CellFormating, cuando cargues tus datos, realizas la validación y debería pintarte la celda correspondiente.

    Javier

    jueves, 8 de diciembre de 2016 17:06
  • Pero lo necesito utilizar cuando cargo los valores en un datagrid con una función que se llama "cargardatagrid"

    En ese caso podría darse el error que no todas las filas se coloreen, por eso es mejor auxiliarse del método CellFormatting. Luego de cargar los datos al DataGridView, ese método se encargaría de ir evaluando fila por fila, y si cumple la condición lo coloreará de color Rojo. 


    Antonio Mata

    jueves, 8 de diciembre de 2016 17:06
  • EstebanQuito125478,

    El evento CellFormatting se produce cada vez que se pinta (escribe) cada celda, por tanto es irrelevante como y cuando cargues los datos, siempre que la celda se pinte se producirá el evento, por consecuencia se realizará la validación del valor y la asignación del formato según corresponda:

    Private Sub dataGridView1_CellFormatting(sender As Object, ...
    	Dim dgv As DataGridView = DirectCast(sender, DataGridView)
    
    	If dgv.Columns(e.ColumnIndex).Name = "CantidadStock" Then
    		If e.Value IsNot Nothing Then
    			e.CellStyle.BackColor = If(CInt(e.Value) > 0, Color.Green, Color.Red)
    		End If
    	End If
    End Sub



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 17:33
  • Con el codigo que me dieron se "pinta" la celda.

    Yo quería saber como pintar la columna.

    Saludos

    jueves, 8 de diciembre de 2016 19:54
  • Hola prueba con:

    DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Red;
    
     

    El cero indica es el indice de la columna que quieres pintar, igualmente lo debes hacer en el evento cellFormating

    Saludos


    Javier

    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 20:06
  • Con el codigo que me dieron se "pinta" la celda.

    Yo quería saber como pintar la columna.

    Saludos

    Entones basta con esto:

    DataGridView1.Columns(e.RowIndex).DefaultCellStyle.BackColor= Color.Red


    Antonio Mata

    • Marcado como respuesta Federico32113 jueves, 8 de diciembre de 2016 20:24
    jueves, 8 de diciembre de 2016 20:06