Quitar bordes a celdas individuales en un datagridview

13/02/2008 - 14:54 por Sergio Palacín | Informe spam
Hola a todos.

Quiero quitar el borde a dos celdas de un datagridview de tal forma que den
la impresión de que sean una sola celda. pero no sé cómo. En los styles del
cell no aparece nada referido a los bordes y lo único que he encontrado se
aplica a todas las celdas del grid.

En concreto debo eliminar la línea de separación vertical entre dos filas,
pero sólo en las dos primeras columnas del grid, no en el resto.

¿Alguien sabe cómo podría hacer esto?

Muchas gracias por adelantado.
 

Leer las respuestas

#1 Luis Miguel Blanco
13/02/2008 - 22:52 | Informe spam
Hola Sergio

Para eliminar los bordes de separación entre las celdas de dos columnas del
DataGridView, no existe una propiedad que proporcione de un modo sencillo
este comportamiento, sino que debemos de utilizar un medio algo más
elaborado, consistente en pintar de forma manual las celdas mediante el
evento CellPainting. De esta forma, controlamos todo el proceso de dibujo,
situando los elementos de la celda tal y como necesitamos: bordes, colores,
texto, etc. Te adjunto un bloque de código con un ejemplo para conseguir este
efecto de eliminación de bordes que comentas.

//-
private void dataGridView1_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
// comprobar que la fila y columna son las adecuadas
if (e.RowIndex >= 0 && (e.ColumnIndex == 0))
{
Color clrFondoCelda;
Color clrTextoCelda;
// en función de si la celda está o no seleccionada
// establecer los colores
if ((e.State & DataGridViewElementStates.Selected) ==
DataGridViewElementStates.Selected)
{
clrFondoCelda = SystemColors.Highlight;
clrTextoCelda = SystemColors.Window;
}
else
{
clrFondoCelda = SystemColors.Window;
clrTextoCelda = SystemColors.WindowText;
}

// rellenar el rectángulo de la celda con el color correspondiente
e.Graphics.FillRectangle(new SolidBrush(clrFondoCelda), e.CellBounds);

// dibujar solamente la línea vertical de la celda
e.Graphics.DrawLine(new Pen(SystemColors.ActiveBorder),
new Point(e.CellBounds.X, e.CellBounds.Y + e.CellBounds.Height -
1),
new Point(e.CellBounds.X + e.CellBounds.Width, e.CellBounds.Y +
e.CellBounds.Height - 1));

// si la celda tiene valor
if (e.Value != null)
{
// calcular el tamaño del texto
Size szTexto;
szTexto = TextRenderer.MeasureText(e.Value.ToString(),
e.CellStyle.Font);

// dibujar el texto
TextRenderer.DrawText(e.Graphics,
e.FormattedValue.ToString(),
e.CellStyle.Font,
e.CellBounds,
clrTextoCelda);
}

e.Handled = true;
}
}
//-

Espero que te sirva de ayuda.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com
http://geeks.ms/blogs/lmblanco/


"Sergio Palacín" wrote:

Hola a todos.

Quiero quitar el borde a dos celdas de un datagridview de tal forma que den
la impresión de que sean una sola celda. pero no sé cómo. En los styles del
cell no aparece nada referido a los bordes y lo único que he encontrado se
aplica a todas las celdas del grid.

En concreto debo eliminar la línea de separación vertical entre dos filas,
pero sólo en las dos primeras columnas del grid, no en el resto.

¿Alguien sabe cómo podría hacer esto?

Muchas gracias por adelantado.



Preguntas similares