Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

cambiar color de fondo de una fila de un datagrid dependiendo del valor de un campo????

1,407 views
Skip to first unread message

Daniel Alvarez

unread,
May 7, 2004, 12:48:20 PM5/7/04
to
Estimados.. primero que nada quiero agradecerles por las respuestas que me
dan
segundo como se puede cambiar el color de fondo de una fila de un datagrid
de acuerdo al valor que tengo un campo (que no se muestra en el
datagrid)????

Ya he buscado en hilos anteriores, pero me resultan muy dificil de
implementar las soluciones que dan. :(

Gracias, Daniel


Eduardo A. Morcillo [MS MVP VB]

unread,
May 7, 2004, 1:20:16 PM5/7/04
to
Daniel Alvarez wrote:
> Estimados.. primero que nada quiero agradecerles por las respuestas
> que me dan
> segundo como se puede cambiar el color de fondo de una fila de un
> datagrid de acuerdo al valor que tengo un campo (que no se muestra en
> el datagrid)????

¿Que te parece esta? Asigna el resultado de CrearTableStyle a la condicion
TableStyles del DataGrid.

Public Function CrearTableStyle( _
ByVal dt As DataTable) As DataGridTableStyle

Dim ts As New DataGridTableStyle
Dim i As Integer

For i = 0 To dt.Columns.Count - 1
Dim gc As New MiDataGridColumn

gc.HeaderText = dt.Columns(i).ColumnName
gc.MappingName = dt.Columns(i).ColumnName

ts.GridColumnStyles.Add(gc)

Next

ts.MappingName = dt.TableName

Return ts

End Function

Public Class MiDataGridColumn
Inherits DataGridTextBoxColumn

Protected Overloads Overrides Sub Paint( _
ByVal g As System.Drawing.Graphics, _
ByVal bounds As System.Drawing.Rectangle, _
ByVal source As System.Windows.Forms.CurrencyManager, _
ByVal rowNum As Integer, _
ByVal backBrush As System.Drawing.Brush, _
ByVal foreBrush As System.Drawing.Brush, _
ByVal alignToRight As Boolean)

Dim drv As DataRowView = CType(source.List.Item(rowNum),
DataRowView)

' Poner color rojo de fondo si cumple condicion

If CONDICION AQUI!!! Then
Dim br As New SolidBrush(Color.Red)
MyBase.Paint(g, bounds, source, rowNum, br, foreBrush,
alignToRight)
br.Dispose()
Else
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush,
alignToRight)
End If

End Sub

End Class

--
Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Daniel Alvarez

unread,
May 7, 2004, 2:47:38 PM5/7/04
to
Eduardo gracias por responder.... me podrias explicar como implento esto????

yo lo coloque asi
=================================================
DataGrid1.TableStyles.Add(Me.CrearTableStyle(dt))
'donde dt es mi datatable
=================================================
en la condicion puse esto:

' Poner color rojo de fondo si cumple condicion

Dim xx As String = GetColumnValueAtRow(source, rowNum)
If xx.StartsWith("ISSA") Then


Dim br As New SolidBrush(Color.Red)

.....
=================================================
y me da este error:
Excepción no controlada del tipo 'System.InvalidCastException' en
system.windows.forms.dll
Información adicional: La conversión del tipo 'DBNull' al tipo 'String' no
es válida.
=================================================

como veras son novate en .NET... te agradezco tu respuestas

Daniel


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo_at_mvps.org> escribió en el
mensaje news:e88GQeFN...@tk2msftngp13.phx.gbl...

Eduardo A. Morcillo [MS MVP VB]

unread,
May 7, 2004, 3:01:08 PM5/7/04
to
En esta linea:

> Dim xx As String = GetColumnValueAtRow(source, rowNum)

Estas haciendo una conversion implicita de Object a String. Dicha conversion
falla en el caso de que el campo contenga un NULL porque no se puede
convertir de NULL a String. Llama a la funcion ToString del objeto devuelto
para obtener siempre un String:

Dim xx As String = GetColumnValueAtRow(source, rowNum).ToString()

Daniel Alvarez

unread,
May 7, 2004, 3:09:46 PM5/7/04
to
Perfecto Eduardo!!! me funciona de maravilla.... ahora una cosita mas...
solo me pinta la celda que cumple la condicion.... como hago para pintar la
fila completa???

Gracias!!
Daniel

"Eduardo A. Morcillo [MS MVP VB]" <emorcillo_at_mvps.org> escribió en el

mensaje news:eozinWGN...@TK2MSFTNGP11.phx.gbl...

Eduardo A. Morcillo [MS MVP VB]

unread,
May 7, 2004, 3:38:57 PM5/7/04
to
Es que con GetColumnValueAtRow estas obteniendo el valor de la columna
actual. Lo que debes hacer es como obtener el valor de la columna especifica
que quieres comprobar:

Dim drv As DataRowView = CType(source.List.Item(rowNum),DataRowView)

If drv.Item("MiCampo").ToString.StartsWith("ISSA") Then
...

Daniel Alvarez

unread,
May 7, 2004, 5:04:40 PM5/7/04
to
Gracias Eduardo!!!!
Funciona de maravilla!!!

bye bye
Daniel


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo_at_mvps.org> escribió en el

mensaje news:%23uKWwrG...@TK2MSFTNGP09.phx.gbl...

0 new messages