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:
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:
Gracias pos tus Publicacion, son de gran utilidad y se aprende mucho de ellas, gracias por las explicaciones.
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
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
:)
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
hola Jaume
podrias intentar lo comentado aqui
how to change gridview cell color based on cell item
saludos
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?
Hola Leandro.
Ya encontré la solución:
e.Row.Cells(0).BackColor = Drawing.Color.Red
Un saludo
Publicar un comentario en la entrada