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]
|
Gracias pos tus Publicacion, son de gran utilidad y se aprende mucho de ellas, gracias por las explicaciones.
ResponderEliminarHola 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
ResponderEliminarlisto ya lo consegui
ResponderEliminarDim 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.
ResponderEliminar¿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
ResponderEliminarpodrias intentar lo comentado aqui
how to change gridview cell color based on cell item
saludos
Hola Leandro.
ResponderEliminarCreo 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.
ResponderEliminarYa encontré la solución:
e.Row.Cells(0).BackColor = Drawing.Color.Red
Un saludo
Hola Leandro..
ResponderEliminarGracias por su publicaciones en todas partes me han salvado de muchas...
Pero una consulta también se puede cambiar el color de la letra de las filas de gridview..
Probe con lo siguiente pero no me dio resultado
e.Row.ForeColor = Drawing.Color.FromName("#ffc7ce")
Saludos
Katita
Hola Leandro,
ResponderEliminarYa vi que era la clase por la cual no dejaba que cambiara el color de la letra...
Igual gracias ;)
Saludos
Leandro tengo una duda, este ejemplo lo adapte y funciono muy bien no tuve problema, pero que pasa cuando tengo en el
ResponderEliminar<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" <---------------, mandando llamar los datos de una Stored procedure, y desplegandolos en el grid, manejo asp.net c#.
Agradeceria mucho tu apoyo
hola
Eliminarsi defines el AutoGenerateColumns = true lo que hara es generar las columnas que muestra el gridview de forma dinamica segun los campos (si es un datatable) o las propiedades (si es una List<> de una clase que defines) automaticamente
mostrara todos los campos/propiedades y no tendras el control sobre que ocultar
es mas puedes hacer la prueba define un gridview simple sin columnas y asigna un datasource
saludos
Gracias!!!
ResponderEliminarAl ponerle color por este evento a las filas. Se borra la configuración de color de fila cuando esta seleccionada y ya no lo resalta. Alguna idea como lograr los dos efectos. Saludos
ResponderEliminarhola
EliminarEl evento RowDataBound se ejecuta cuando asignas el DataSource y realizas el Databind() del grid, por lo tanto no hay seleccion en ese momento ya que estas cargando las rows
La seleccion deberias realizarla por medio de algun link o boton en la rows.
saludos
Buen aporte
ResponderEliminar