lunes, 20 de junio de 2011

[GridView] Aplicar color en las filas

 

Introducción

Este artículo plantea como aplicar color a las filas del gridview basándose en la definición de cierta regla previamente establecida.

En el ejemplo se tiene una lista de productos, la cual por “error” uno fue duplicado, la idea es poder detectar en que registros del grid se presenta este problema y remarcarlo con un color diferente para un fácil reconocimiento.

Se hará uso de linq trabajando junto a un dataset para poder aplicar la verificación de cada ítem en memoria.

El resultado obtenido será el visualizado en la imagen siguiente:

Determina color GridView

Para aplicar la lógica de colores en cada fila del grid será usado el evento RowDataBound, el mismo se lanza por cada row creada en el grid, es por eso que validando la información de la fila contra el origen de datos será posible determinar si la información esta repetida

 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string desc = e.Row.Cells[0].Text;

        int cant = (from item in ((DataTable)Session["datos"]).AsEnumerable()
                      where item.Field<string>("Descripcion") == desc
                      select item).Count();

        if (cant > 1)
        {
            e.Row.BackColor = Color.LightCoral;
        }
        
    }
}

 

[C#]
[C# SkyDrive]

7 comentarios:

Eduardo Villota dijo...

Gracias pos tus Publicacion, son de gran utilidad y se aprende mucho de ellas, gracias por las explicaciones.

Javier Linares García dijo...

Hola leandro, me darias una manita pasandolo a vb?, lo intente con los website que estan en internet pero con errores y no me ejectua.. gracias

Javier Linares García dijo...

listo ya lo consegui

Dim desc As String = e.Row.Cells(0).Text
Dim cant As Integer = (From item In (CType(Session("datos"), DataTable)).AsEnumerable() Where item.Field(Of String)("Descripcion") = desc Select item).Count()

If cant > 1 Then
e.Row.BackColor = Drawing.Color.Aquamarine
End If



:)

Jaume Estrany Mas dijo...

Hola Leandro.
¿Como puedo colorear solo una celda que cumpla cierta condición? Para las filas uso "e.Row.ForeColor = System.Drawing.Color.Red" en un IF y me va bien, pero ahora solo quiero una celda y no lo consigo con "e.Row.Cells[3].BackColor = System.Drawing.Color.Red"?
Saludos, Jaume

Leandro Tuttini dijo...

hola Jaume

podrias intentar lo comentado aqui

how to change gridview cell color based on cell item


saludos

Jaume Estrany Mas dijo...

Hola Leandro.
Creo que el problema está en que yo uso VB y esta sentencia es de C#. ¿Tienes idea de como se pone en VB?

Jaume Estrany Mas dijo...

Hola Leandro.
Ya encontré la solución:
e.Row.Cells(0).BackColor = Drawing.Color.Red
Un saludo