Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Cómo: Personalizar la apariencia de las celdas en el control DataGridView de formularios Windows Forms

 

Puede personalizar la apariencia de cualquier celda mediante el control del evento CellPainting del control DataGridView. Puede extraer el Graphics del control DataGridView de la propiedad Graphics de DataGridViewCellPaintingEventArgs. Con Graphics, puede modificar la apariencia de todo el control DataGridView, pero normalmente querrá modificar sólo a la apariencia de la celda que se está pintando actualmente. La propiedad ClipBounds de DataGridViewCellPaintingEventArgs le permite restringir sus operaciones de representación a la celda que está pintando.

En el ejemplo de código siguiente, pintará todas las celdas en una columna ContactName mediante la combinación de colores del control DataGridView. El contenido de texto de cada celda se pinta en la propiedad Crimson y se dibuja un rectángulo de bajorrelieve en el mismo color que la propiedad GridColor del control DataGridView.

Ejemplo

private void dataGridView1_CellPainting(object sender,
System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
{
    if (this.dataGridView1.Columns["ContactName"].Index ==
        e.ColumnIndex && e.RowIndex >= 0)
    {
        Rectangle newRect = new Rectangle(e.CellBounds.X + 1,
            e.CellBounds.Y + 1, e.CellBounds.Width - 4,
            e.CellBounds.Height - 4);

        using (
            Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
            backColorBrush = new SolidBrush(e.CellStyle.BackColor))
        {
            using (Pen gridLinePen = new Pen(gridBrush))
            {
                // Erase the cell.
                e.Graphics.FillRectangle(backColorBrush, e.CellBounds);

                // Draw the grid lines (only the right and bottom lines;
                // DataGridView takes care of the others).
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                    e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom - 1);
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                    e.CellBounds.Top, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom);

                // Draw the inset highlight box.
                e.Graphics.DrawRectangle(Pens.Blue, newRect);

                // Draw the text content of the cell, ignoring alignment.
                if (e.Value != null)
                {
                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
                        Brushes.Crimson, e.CellBounds.X + 2,
                        e.CellBounds.Y + 2, StringFormat.GenericDefault);
                }
                e.Handled = true;
            }
        }
    }
}

Compilar el código

Para este ejemplo se necesita:

  • Un control DataGridView denominado dataGridView1 con una columna ContactName como la de la tabla Customers de la base de datos de ejemplo Northwind.

  • Referencias a los ensamblados System, System.Windows.Forms y System.Drawing.

Mostrar: