Colores de las filas de un DataGrid

18/10/2006 - 06:51 por Leo Lob | Informe spam
VS 2003, por consiguiente, Framework 1.1

Como puedo hacer para que ciertas filas de un DataGrid tengan un color
distinto que otras?

Para los que conocen Visual Fox, es como la propiedad
DynamicBackColor="iif(saldo>0, RGB(255, 0, 0), RGB(255, 255, 255))".

Gracias.



Leo Lob
Director de operaciones
Logiciel soluciones informáticas
LeoLob@Logiciel.Com.Ar
www.logiciel.com.ar
 

Leer las respuestas

#1 Luis Miguel Blanco
18/10/2006 - 10:04 | Informe spam
Hola Leo

Prueba a utilizar estilos en tu datagrid, para lo cual, deberías en primer
lugar, crear un objeto DataGridTableStyle al cual deberás añadirle objetos de
estilo de columna DataGridTextBoxColumn, y en ellos configurar sus
propiedades para que se muestren con una combinación de colores y letra
adaptada a tus necesidades.

Respecto a personalizar el color de fondo según una condición, aquí tendrías
que crear una clase derivada de DataGridTextBoxColumn y reemplazar su método
Paint(), dentro del cual, compruebas el campo con el que en ese momento el
datagrid está trabajando y el valor que se va a pintar en la celda en curso,
en función de dicho valor, aplicas el color que necesites.

Te adjunto un bloque de código de ejemplo para que lo pruebes:

//-

public class Form1 : System.Windows.Forms.Form
{
SqlConnection oConex;
SqlDataAdapter oDataAdapter;
DataSet oDataSet;

private void Form1_Load(object sender, System.EventArgs e)
{
oConex = new
SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=");
oDataAdapter = new SqlDataAdapter("SELECT * FROM Products", oConex);
oDataSet = new DataSet();

oConex.Open();
oDataAdapter.Fill(oDataSet, "Products");
oConex.Close();

this.dataGrid1.DataSource=oDataSet;
this.dataGrid1.DataMember="Products";

DataGridTableStyle oEstilo=new DataGridTableStyle();
oEstilo.MappingName="Products";

DataGridTextBoxColumn oCampo1 =new DataGridTextBoxColumn();
oCampo1.MappingName="ProductID";
oCampo1.HeaderText="Cod prod";

DataGridTextBoxColumn oCampo2 =new DataGridTextBoxColumn();
oCampo2.MappingName="ProductName";
oCampo2.HeaderText="nombre producto";

DataGridTextBoxColumn oCampo3 =new DGTxtColColor();
oCampo3.MappingName="SupplierID";
oCampo3.HeaderText="código proveedor";


oEstilo.GridColumnStyles.AddRange(new DataGridColumnStyle[]
{oCampo1,oCampo2,oCampo3});

this.dataGrid1.TableStyles.Add(oEstilo);
}
}

public class DGTxtColColor : DataGridTextBoxColumn
{
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
Brush backBrush,
Brush foreBrush,
bool alignToRight)
{
DataRowView oDataRowView;
DataRow oDataRow;
int nValorCelda;
Brush oFondo=null;

oDataRowView =(DataRowView)source.List[rowNum];
oDataRow = oDataRowView.Row;
nValorCelda= (int)oDataRow["SupplierID"];

if (nValorCelda==2)
{
oFondo=new SolidBrush(Color.SkyBlue);
}
else
{
oFondo=backBrush;
}

base.Paint(g, bounds, source, rowNum, oFondo,foreBrush, alignToRight);
}
}
//-

Espero que con esto puedas resolver el problema.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Leo Lob" wrote:

VS 2003, por consiguiente, Framework 1.1

Como puedo hacer para que ciertas filas de un DataGrid tengan un color
distinto que otras?

Para los que conocen Visual Fox, es como la propiedad
DynamicBackColor="iif(saldo>0, RGB(255, 0, 0), RGB(255, 255, 255))".

Gracias.



Leo Lob
Director de operaciones
Logiciel soluciones informáticas

www.logiciel.com.ar



Preguntas similares