Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Estilo Filas DataGrid (https://www.clubdelphi.com/foros/showthread.php?t=14879)

mamen 04-10-2004 13:33:55

Estilo Filas DataGrid
 
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.

Código:

    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:
Código:

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/Pr...DataGrids4.asp


La franja horaria es GMT +2. Ahora son las 07:49:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi