none
Mantener formato fila RRS feed

  • Pregunta

  • Hola, tengo un datagridview el cual según cierta condición sus filas pueden cambiar el formato, en este caso cambiando el color. La función que uso es la siguiente:

     Private Sub MarcarSinStock()
            Try
                Dim fila As DataGridViewRow = New DataGridViewRow
                For Each fila In DGVProductos.Rows
    
                    If fila.Cells("CantidadStock").Value = 0 Then
                        fila.DefaultCellStyle.BackColor = Color.Red
                    ElseIf fila.Cells("CantidadStock").Value <= fila.Cells("AvisoStock").Value And fila.Cells("CantidadStock").Value >= 1 Then
                        fila.DefaultCellStyle.BackColor = Color.Firebrick
                    End If
                Next
            Catch ex As Exception
                MessageBox.Show("Se produjo un error : " & ex.Message)
            End Try
        End Sub

    Al ejecutarla efectivamente me cambia el formato de algunas filas, pero el problema por el cual hago la pregunta es que si hago clic en una columna para así poder ordenarla por la misma pierdo el formato.

    Existe alguna propiedad para mantener el formato de las filas o alguna otra solución?

    Saludos!

    • Cambiado Enrique M. Montejo lunes, 6 de noviembre de 2017 8:11 Pregunta relacionada con controles de Windows Forms.
    lunes, 30 de octubre de 2017 17:52

Respuestas

  •     Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    
            Dim dgv As DataGridView = CType(sender, DataGridView)
            If e.ColumnIndex = 1 Then
    
                If CInt(e.Value) = 0 Then
                    'e.CellStyle.BackColor = Color.Red
                    dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
                Else
                    'e.CellStyle.BackColor = Color.Firebrick
                    dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Firebrick
                End If
    
            End If
        End Sub
    

    Las líneas comentadas afectan sólo a la celda y no a la fila. En este caso la columna testeada es la 1 (la segunda).

    lunes, 30 de octubre de 2017 21:00

Todas las respuestas

  • Se me ocurre, no se si sera practico, el evento de ordenación de la columna es ColumnHeaderMouseClick, si allí colocas MarcaSinStock() ?
    lunes, 30 de octubre de 2017 18:49
  • o simplemente sobre escribe el evento CellPainting del DataGridView y allí validas la columna que necesitas y al parámetro cellStyle le cambias el color del BackColor

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    • Marcado como respuesta Federico32113 martes, 31 de octubre de 2017 3:27
    • Desmarcado como respuesta Federico32113 martes, 31 de octubre de 2017 3:28
    lunes, 30 de octubre de 2017 20:31
  •     Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    
            Dim dgv As DataGridView = CType(sender, DataGridView)
            If e.ColumnIndex = 1 Then
    
                If CInt(e.Value) = 0 Then
                    'e.CellStyle.BackColor = Color.Red
                    dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
                Else
                    'e.CellStyle.BackColor = Color.Firebrick
                    dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Firebrick
                End If
    
            End If
        End Sub
    

    Las líneas comentadas afectan sólo a la celda y no a la fila. En este caso la columna testeada es la 1 (la segunda).

    lunes, 30 de octubre de 2017 21:00