PDA

Ver la Versión Completa : Estilo Filas DataGrid


mamen
04-10-2004, 13:33:55
Es posible que una fila de un datagrid tenga un color de fondo u otro dependiendo del valor que tenga en una determinada columna???

He mirado las propiedades del datagrid y lo único que he encontrado es ItemStyle (un mismo estilo para todas las filas) y AlternatingItemStyle.

Si es posible me puedes decir cómo??

Muchas gracias por todo.

__hector
04-10-2004, 16:36:34
Si.

En el evento itemdatabound del grid puedes trabajar con los estilos de acuerdo a el/los valores de las celdas.

En este ejemplo, pongo el texto en negritas si el valor de una celda es igual a true.


Private Sub grid_ItemDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.DataGridItemEventArgs) Handles gridSolicitudes.ItemDataBound
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.SelectedItem _
Or e.Item.ItemType = ListItemType.Item Then
e.Item.Font.Bold = e.Item.Cells(5).Text
End If
End Sub


El codigo esta en VB.NET, pero es facilmente portable a tu necesidad.

Suerte!

mamen
06-10-2004, 12:39:36
No me he enterado muy bien, me lo puedes explicar mejor

Para que pones exactamente la condición del if, que significa???

If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.SelectedItem _
Or e.Item.ItemType = ListItemType.Item Then

Otra cosilla con e.Item.Cells[5].Text te estas refiriendo a la columna 5 del datagrid pero yo lo que quiero es poner de un color una fila completamente, no una columna entera. No se si me explico bien.

Si pongo e.Item[0].Cells.... asi intento referirme por ejemplo a la fila 0 pero me dice que no se reconoce Item.

Muchas gracias.

__hector
07-10-2004, 16:51:26
Pues fijate: si buscamos un poco en la ayuda de .NET, vemos que el parametro e lleva como tipo un elemento de la clase DataGridItemEventArgs. En la ayuda dice que este parametro ofrece los datos para los eventos de itemcreated e itemdatabound.

Si seguimos viendo, esta clase (ItemType) se comparte entre datagrid y datalists, y existen diferentes tipos:

AlternatingItem An item in alternating (zero-based even-indexed) cells. It is data-bound.
EditItem An item in a list control currently in edit mode. It is data-bound.
Footer A footer for the list control. It is not data-bound.
Header A header for the list control. It is not data-bound.
Item An item in the list control. It is data-bound.
Pager A pager that displays the controls to navigate to different pages associated with the DataGrid control.
It is not data-bound.
SelectedItem A selected item in the list control. It is data-bound.
Separator A separator between items in a list control. It is not data-bound.


Siendo ese el caso, tenemos que identificar los valores que queremos desplegar, asi que eso no lo encontraremos ni cuando llena los datos del header, ni del footer, ni del pager, etc etc. De ahi viene esa comparacion: para determinar cuando los valores que se estan "bindeando" son los correspondientes a las filas.

Asi que, cuando identificas una fila que cumple con una condicion (si la columna tal del grid tiene tal valor), solo tendrias que especificar la propiedad de estilo de cada celda de esa fila (teniendo en cuenta que esa rutina se ejecuta para cada fila que va escribiendo en la pagina), de la forma:

si condicion
e.item.cells[0].backcolor = talcosa
e.item.cells[m].backcolor = talcosa

mamen
11-10-2004, 11:37:12
Eso de las celdas ya lo habia pensado, pero el problema que tengo es que al poner

e.item.cells[0].backcolor = talcosa

me pone el fondo a todas las celdas de dicha columna del datagrid, no a la celda de la fila que me interesa.

Se supone que en e está la fila actual no??? Pues por q me pone el fondo al resto de filas???

__hector
11-10-2004, 15:12:01
Simple: la comparacion no la estas haciendo bien. Prueba a ver que la comparacion de los valores no siempre te devuelva true, porque en ese manejador del evento, cada operacion que hagas sobre e afecta solo a la fila actual.

mamen
21-10-2004, 11:15:12
Muchas gracias ya lo he solucionado. Tenias razón la comparación la tenia mal hecha.


Chao. Gracias.

yorugua
06-10-2005, 04:22:05
hola amigos
yo necesito hacer eso mismo con el datagrid pero en un winform de vb.net
¿pueden decirme cómo lo hago?
gracias

__hector
11-10-2005, 19:39:45
Un poco mas dificil es esta tarea. El DataGrid de SWF no soporta los metodos, ni tiene las propiedades ni eventos que el propio de los Webcontrols, pero seguro si existen sus equivalentes.

Navegando un momento me tope con este articulo que seguro te puede ser de utilidad:

http://www.codeproject.com/csharp/PracticalGuideDataGrids4.asp