Cambio de color en una celda del datagrid

01/05/2006 - 02:09 por vanels | Informe spam
Hola buenas

Estoy intentando cambiar el color de fuente de ciertas celdas del datagrid. Quiero hacer que cuando una celda coincida con una cadena determinada cambie su color
El problema es que al valor accedo sin ningun problema pero al "contenedor" para cambiarle el color, no hay manera..

Si sabeis algo ya direis. Muchas gracias de antemano

vanels

Ver este tema: http://www.softwaremix.net/viewtopic-511016.htm

Enviado desde http://www.softwaremix.net
 

Leer las respuestas

#1 Luis Miguel Blanco
03/05/2006 - 11:59 | Informe spam
Hola vanels

Prueba a utilizar un estilo aplicado al datagrid. En primer lugar debes
crear un objeto DataGridTableStyle y tantos objetos DataGridTextBoxColumn
como columnas quieras mostrar en el grid, excepto en la columna a la que
quieres aplicar un color en base a una condición. Para esta columna creas una
clase que herede de DataGridTextBoxColumn y reemplazas el método Paint(),
añadiendo el código personalizado que modifique el color de fondo cuando se
cumpla la condición. Te adjunto un ejemplo de código para que puedas probarlo
y hacer las modificaciones para tu caso:

'/////////////////////////////////////////////////
Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim oConnection As SqlConnection
Dim oDataAdapter As SqlDataAdapter
Dim oDataSet As DataSet

oConnection = New
SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=")
oDataAdapter = New SqlDataAdapter("SELECT
ProductID,ProductName,SupplierID FROM Products", oConnection)
oDataSet = New DataSet

oConnection.Open()
oDataAdapter.Fill(oDataSet, "Products")
oConnection.Close()

Me.DataGrid1.DataSource = oDataSet
Me.DataGrid1.DataMember = "Products"

Dim oTableStyle As New DataGridTableStyle
oTableStyle.MappingName = "Products"

Dim oProductID As New DataGridTextBoxColumn
oProductID.MappingName = "ProductID"
oProductID.HeaderText = "Código"
oProductID.Alignment = HorizontalAlignment.Center

Dim oProductName As New DataGridTextBoxColumn
oProductName.MappingName = "ProductName"
oProductName.HeaderText = "Nombre"

Dim oSupplierID As New DGTxtColColor
oSupplierID.MappingName = "SupplierID"
oSupplierID.HeaderText = "Proveedor"

oTableStyle.GridColumnStyles.AddRange(New DataGridColumnStyle() _
{oProductID, oProductName, oSupplierID})

Me.DataGrid1.TableStyles.Add(oTableStyle)
End Sub
End Class

'
Public Class DGTxtColColor
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 oBrush As SolidBrush
Dim oFilaDatos As DataRowView = source.List(rowNum)

If oFilaDatos("SupplierID") = 3 Then
oBrush = New SolidBrush(Color.Aquamarine)
Else
oBrush = backBrush
End If

MyBase.Paint(g, bounds, source, rowNum, _
oBrush, _
foreBrush, _
alignToRight)
End Sub
End Class
'/////////////////////////////////////////////////

Observa que para la columna del campo SupplierID usamos en el datagrid una
clase propia, y en su evento Paint() comprobamos el valor de dicho campo,
cuando sea 3, le aplicamos un color de fondo distinto.

Espero que te sea de utilidad.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"vanels" wrote:


Hola buenas,

Estoy intentando cambiar el color de fuente de ciertas celdas del datagrid. Quiero hacer que cuando una celda coincida con una cadena determinada cambie su color.
El problema es que al valor accedo sin ningun problema pero al "contenedor" para cambiarle el color, no hay manera...

Si sabeis algo ya direis. Muchas gracias de antemano.


vanels


Ver este tema: http://www.softwaremix.net/viewtopic-511016.html

Enviado desde http://www.softwaremix.net



Preguntas similares